@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.
- package/dist/build-info.json +1 -1
- package/dist/modules/wake-queue/adapters/queued-comment-postgres.d.ts.map +1 -1
- package/dist/modules/wake-queue/adapters/queued-comment-postgres.js +2 -0
- package/dist/modules/wake-queue/adapters/queued-comment-postgres.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +2 -1
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/openapi.js +1 -1
- package/dist/routes/openapi.js.map +1 -1
- package/dist/services/agents.d.ts +10 -10
- package/dist/services/connectors/slack.d.ts +13 -13
- package/dist/services/issue-queued-comment-queue.d.ts +2 -0
- package/dist/services/issue-queued-comment-queue.d.ts.map +1 -1
- package/dist/services/issue-queued-comment-queue.js +1 -0
- package/dist/services/issue-queued-comment-queue.js.map +1 -1
- package/dist/services/issue-queued-comment-queue.test.js +33 -0
- package/dist/services/issue-queued-comment-queue.test.js.map +1 -1
- package/dist/services/native-runtime/native-session-executor.d.ts +2 -0
- package/dist/services/native-runtime/native-session-executor.d.ts.map +1 -1
- package/dist/services/native-runtime/native-session-executor.js +22 -11
- package/dist/services/native-runtime/native-session-executor.js.map +1 -1
- package/dist/services/native-runtime/native-session-executor.test.js +86 -1
- package/dist/services/native-runtime/native-session-executor.test.js.map +1 -1
- package/node_modules/mdast-util-gfm-strikethrough/lib/index.d.ts +5 -9
- package/node_modules/mdast-util-gfm-strikethrough/lib/index.d.ts.map +1 -0
- package/node_modules/mdast-util-gfm-strikethrough/lib/index.js +42 -15
- package/node_modules/mdast-util-gfm-strikethrough/license +1 -1
- package/node_modules/mdast-util-gfm-strikethrough/package.json +50 -65
- package/node_modules/mdast-util-gfm-strikethrough/readme.md +61 -61
- package/package.json +21 -21
- package/ui-dist/assets/{Agents.production-DmAeIRUO.js → Agents.production-8qlt1Kfz.js} +2 -2
- package/ui-dist/assets/{CompanyActivity.production-BHajCPR3.js → CompanyActivity.production-5SMUB7d1.js} +1 -1
- package/ui-dist/assets/{CompanyExport-B-SFGdV7.js → CompanyExport-6I3sVn6H.js} +1 -1
- package/ui-dist/assets/{CompanySkills.production-CuwwxUVf.js → CompanySkills.production-D2gPJ-P4.js} +1 -1
- package/ui-dist/assets/{Costs.production-51LUilni.js → Costs.production-B0OTET_G.js} +1 -1
- package/ui-dist/assets/{OrgChart.production-CD4WHR5p.js → OrgChart.production-DwWAVR7P.js} +1 -1
- package/ui-dist/assets/{RoutineDetail.production-CRLOTbjy.js → RoutineDetail.production-VmWolND-.js} +1 -1
- package/ui-dist/assets/{Routines.production-zXFYwdPi.js → Routines.production-D0tSjxYE.js} +1 -1
- package/ui-dist/assets/{definition-D3MqX5GE.js → definition-BWdGNoyH.js} +1 -1
- package/ui-dist/assets/{index-BF7JM92C.js → index-uMsYlEv4.js} +4 -4
- package/ui-dist/index.html +1 -1
- 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) => {
|