@phyzess/pappra 0.1.0-beta.13 → 0.1.0-beta.18
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/README.md +134 -15
- package/assets/integrations/skills/pappra/SKILL.md +28 -7
- package/assets/integrations/skills/pappra/references/collaboration.md +633 -0
- package/assets/integrations/skills/pappra/references/environment.md +360 -0
- package/assets/integrations/skills/pappra/references/hosts.md +20 -0
- package/assets/integrations/skills/pappra/references/operations.md +36 -5
- package/dist/adapters/pi/recovery-extension.d.ts +65 -0
- package/dist/adapters/pi/recovery-extension.js +238 -0
- package/dist/adapters/pi/session-transition-extension.d.ts +30 -0
- package/dist/adapters/pi/session-transition-extension.js +265 -0
- package/dist/app/automatic-handoff-events.d.ts +26 -0
- package/dist/app/automatic-handoff-events.js +134 -0
- package/dist/app/bounded-file.d.ts +2 -0
- package/dist/app/bounded-file.js +2 -0
- package/dist/app/capability-evidence/claude.d.ts +37 -0
- package/dist/app/capability-evidence/claude.js +206 -0
- package/dist/app/capability-evidence/codex.d.ts +35 -0
- package/dist/app/capability-evidence/codex.js +193 -0
- package/dist/app/capability-evidence/index.d.ts +33 -0
- package/dist/app/capability-evidence/index.js +117 -0
- package/dist/app/capability-evidence/pi.d.ts +73 -0
- package/dist/app/capability-evidence/pi.js +669 -0
- package/dist/app/capability-evidence/shared.d.ts +69 -0
- package/dist/app/capability-evidence/shared.js +195 -0
- package/dist/app/collab-auto-handoff.d.ts +55 -0
- package/dist/app/collab-auto-handoff.js +384 -0
- package/dist/app/collab-bindings.d.ts +57 -0
- package/dist/app/collab-bindings.js +1006 -0
- package/dist/app/collab-bootstrap-transport.d.ts +163 -0
- package/dist/app/collab-bootstrap-transport.js +769 -0
- package/dist/app/collab-bootstrap.d.ts +137 -0
- package/dist/app/collab-bootstrap.js +3455 -0
- package/dist/app/collab-handoff.d.ts +12 -0
- package/dist/app/collab-handoff.js +511 -0
- package/dist/app/collab-messages.d.ts +2 -0
- package/dist/app/collab-messages.js +2 -0
- package/dist/app/collab-notify.d.ts +156 -0
- package/dist/app/collab-notify.js +1208 -0
- package/dist/app/collab-preflight.d.ts +34 -0
- package/dist/app/collab-preflight.js +96 -0
- package/dist/app/collab-recovery-executor.d.ts +161 -0
- package/dist/app/collab-recovery-executor.js +1153 -0
- package/dist/app/collab-recovery-projection.d.ts +103 -0
- package/dist/app/collab-recovery-projection.js +659 -0
- package/dist/app/collab-recovery.d.ts +25 -0
- package/dist/app/collab-recovery.js +429 -0
- package/dist/app/collab-resources.d.ts +16 -0
- package/dist/app/collab-resources.js +278 -0
- package/dist/app/collab-role-events.d.ts +22 -0
- package/dist/app/collab-role-events.js +329 -0
- package/dist/app/collab-role-orchestration.d.ts +53 -0
- package/dist/app/collab-role-orchestration.js +601 -0
- package/dist/app/collab-role-plan.d.ts +81 -0
- package/dist/app/collab-role-plan.js +504 -0
- package/dist/app/collab-role-repair.d.ts +109 -0
- package/dist/app/collab-role-repair.js +821 -0
- package/dist/app/collab-rollover.d.ts +263 -0
- package/dist/app/collab-rollover.js +1112 -0
- package/dist/app/collab-route.d.ts +64 -0
- package/dist/app/collab-route.js +240 -0
- package/dist/app/collab-session-transition.d.ts +221 -0
- package/dist/app/collab-session-transition.js +3334 -0
- package/dist/app/collab-state.d.ts +7 -0
- package/dist/app/collab-state.js +162 -0
- package/dist/app/collab-task-store.d.ts +22 -0
- package/dist/app/collab-task-store.js +204 -0
- package/dist/app/collab-work-execution.d.ts +127 -0
- package/dist/app/collab-work-execution.js +1027 -0
- package/dist/app/collab-work-plan.d.ts +87 -0
- package/dist/app/collab-work-plan.js +437 -0
- package/dist/app/collaboration.d.ts +8 -2
- package/dist/app/collaboration.js +101 -12
- package/dist/app/doctor.js +108 -5
- package/dist/app/host-mcp.js +34 -8
- package/dist/app/host-probe.js +4 -4
- package/dist/app/init.d.ts +58 -4
- package/dist/app/init.js +768 -155
- package/dist/app/managed-pi-bootstrap-admission.d.ts +14 -0
- package/dist/app/managed-pi-bootstrap-admission.js +104 -0
- package/dist/app/managed-pi-bootstrap-refresh.d.ts +10 -0
- package/dist/app/managed-pi-bootstrap-refresh.js +78 -0
- package/dist/app/managed-pi-delivery.d.ts +8 -0
- package/dist/app/managed-pi-delivery.js +110 -0
- package/dist/app/managed-pi-handoff-receiver.d.ts +15 -0
- package/dist/app/managed-pi-handoff-receiver.js +263 -0
- package/dist/app/managed-pi-handoff-reference.d.ts +3 -0
- package/dist/app/managed-pi-handoff-reference.js +60 -0
- package/dist/app/managed-pi-herdr.d.ts +21 -0
- package/dist/app/managed-pi-herdr.js +185 -0
- package/dist/app/managed-pi-initial-admission.d.ts +28 -0
- package/dist/app/managed-pi-initial-admission.js +416 -0
- package/dist/app/managed-pi-initial-launch.d.ts +5 -0
- package/dist/app/managed-pi-initial-launch.js +61 -0
- package/dist/app/managed-pi-native-observation.d.ts +36 -0
- package/dist/app/managed-pi-native-observation.js +191 -0
- package/dist/app/managed-pi-readiness.d.ts +29 -0
- package/dist/app/managed-pi-readiness.js +288 -0
- package/dist/app/managed-pi-repair-stop.d.ts +21 -0
- package/dist/app/managed-pi-repair-stop.js +371 -0
- package/dist/app/managed-pi-resume-admission.d.ts +32 -0
- package/dist/app/managed-pi-resume-admission.js +618 -0
- package/dist/app/managed-pi-retirement.d.ts +28 -0
- package/dist/app/managed-pi-retirement.js +112 -0
- package/dist/app/managed-pi-sdk-control.d.ts +7 -0
- package/dist/app/managed-pi-sdk-control.js +169 -0
- package/dist/app/managed-pi-sdk-runtime.d.ts +3 -0
- package/dist/app/managed-pi-sdk-runtime.js +483 -0
- package/dist/app/managed-pi-source-admission.d.ts +14 -0
- package/dist/app/managed-pi-source-admission.js +323 -0
- package/dist/app/managed-pi-transition-host.d.ts +36 -0
- package/dist/app/managed-pi-transition-host.js +292 -0
- package/dist/app/managed-pi.d.ts +54 -0
- package/dist/app/managed-pi.js +248 -0
- package/dist/app/shell-readiness.d.ts +66 -0
- package/dist/app/shell-readiness.js +368 -0
- package/dist/app/task-pin.d.ts +2 -23
- package/dist/app/task-pin.js +2 -113
- package/dist/cli/commands/collaboration-binding.d.ts +13 -0
- package/dist/cli/commands/collaboration-binding.js +118 -0
- package/dist/cli/commands/collaboration-bootstrap.d.ts +10 -0
- package/dist/cli/commands/collaboration-bootstrap.js +84 -0
- package/dist/cli/commands/collaboration-capabilities.d.ts +13 -0
- package/dist/cli/commands/collaboration-capabilities.js +127 -0
- package/dist/cli/commands/collaboration-handoff.d.ts +13 -0
- package/dist/cli/commands/collaboration-handoff.js +102 -0
- package/dist/cli/commands/collaboration-message.d.ts +17 -0
- package/dist/cli/commands/collaboration-message.js +177 -0
- package/dist/cli/commands/collaboration-plan.d.ts +8 -0
- package/dist/cli/commands/collaboration-plan.js +108 -0
- package/dist/cli/commands/collaboration-preflight.d.ts +10 -0
- package/dist/cli/commands/collaboration-preflight.js +167 -0
- package/dist/cli/commands/collaboration-recovery-run.d.ts +46 -0
- package/dist/cli/commands/collaboration-recovery-run.js +224 -0
- package/dist/cli/commands/collaboration-recovery.d.ts +11 -0
- package/dist/cli/commands/collaboration-recovery.js +104 -0
- package/dist/cli/commands/collaboration-resources.d.ts +11 -0
- package/dist/cli/commands/collaboration-resources.js +96 -0
- package/dist/cli/commands/collaboration-role-plan.d.ts +9 -0
- package/dist/cli/commands/collaboration-role-plan.js +69 -0
- package/dist/cli/commands/collaboration-role-run.d.ts +11 -0
- package/dist/cli/commands/collaboration-role-run.js +128 -0
- package/dist/cli/commands/collaboration-rollover.d.ts +10 -0
- package/dist/cli/commands/collaboration-rollover.js +103 -0
- package/dist/cli/commands/collaboration-state.d.ts +10 -0
- package/dist/cli/commands/collaboration-state.js +96 -0
- package/dist/cli/commands/collaboration-transition.d.ts +10 -0
- package/dist/cli/commands/collaboration-transition.js +75 -0
- package/dist/cli/commands/collaboration-work-run.d.ts +34 -0
- package/dist/cli/commands/collaboration-work-run.js +178 -0
- package/dist/cli/commands/collaboration.d.ts +4 -0
- package/dist/cli/commands/collaboration.js +39 -4
- package/dist/cli/commands/continuity.js +2 -6
- package/dist/cli/commands/docs.d.ts +2 -0
- package/dist/cli/commands/docs.js +89 -15
- package/dist/cli/commands/host.d.ts +7 -1
- package/dist/cli/commands/host.js +122 -7
- package/dist/cli/commands/init.d.ts +20 -3
- package/dist/cli/commands/init.js +897 -232
- package/dist/cli/commands/mcp.d.ts +1 -0
- package/dist/cli/commands/mcp.js +11 -5
- package/dist/cli/commands/repair.d.ts +12 -0
- package/dist/cli/commands/repair.js +41 -0
- package/dist/cli/commands/runtime.d.ts +1 -1
- package/dist/cli/commands/runtime.js +139 -38
- package/dist/cli/commands/session.d.ts +7 -0
- package/dist/cli/commands/session.js +82 -0
- package/dist/cli/commands/task.js +19 -5
- package/dist/cli/run.js +866 -24
- package/dist/code/identity.d.ts +7 -0
- package/dist/code/identity.js +7 -3
- package/dist/code/registration.js +7 -0
- package/dist/code/service.d.ts +9 -0
- package/dist/code/service.js +16 -3
- package/dist/code/text.js +19 -7
- package/dist/collab/admission.d.ts +91 -66
- package/dist/collab/admission.js +21 -6
- package/dist/collab/canonical.d.ts +1 -1
- package/dist/collab/canonical.js +44 -3
- package/dist/collab/envelope.d.ts +2 -2
- package/dist/collab/envelope.js +12 -12
- package/dist/collab/first-work.d.ts +3 -0
- package/dist/collab/first-work.js +15 -0
- package/dist/collab/handoff.d.ts +16 -0
- package/dist/collab/handoff.js +39 -5
- package/dist/collab/index.d.ts +97 -1
- package/dist/collab/index.js +9 -1
- package/dist/collab/messages.js +126 -3
- package/dist/collab/persisted-messages.d.ts +123 -0
- package/dist/collab/persisted-messages.js +496 -0
- package/dist/collab/preflight.d.ts +1 -1
- package/dist/collab/resources.d.ts +13 -3
- package/dist/collab/resources.js +37 -6
- package/dist/collab/rollover.d.ts +311 -0
- package/dist/collab/rollover.js +1024 -0
- package/dist/collab/store.d.ts +1 -0
- package/dist/collab/store.js +1 -4
- package/dist/collab/types.d.ts +2 -354
- package/dist/collab/validation.d.ts +2 -10
- package/dist/collab/validation.js +2 -303
- package/dist/collab/work-plan.d.ts +105 -0
- package/dist/collab/work-plan.js +843 -0
- package/dist/continuity/context.d.ts +11 -2
- package/dist/continuity/context.js +100 -13
- package/dist/continuity/handoff-bundle.d.ts +296 -0
- package/dist/continuity/handoff-bundle.js +477 -0
- package/dist/continuity/index.d.ts +2 -0
- package/dist/continuity/index.js +1 -0
- package/dist/continuity/paths.js +10 -2
- package/dist/continuity/service.js +91 -15
- package/dist/continuity/task-pin.d.ts +24 -0
- package/dist/continuity/task-pin.js +590 -0
- package/dist/doctor.d.ts +1 -0
- package/dist/doctor.js +6 -0
- package/dist/experimental/index.d.ts +13 -0
- package/dist/experimental/index.js +25 -0
- package/dist/experimental/pi.d.ts +4 -0
- package/dist/experimental/pi.js +12 -0
- package/dist/hosts/claude/native.js +1 -1
- package/dist/hosts/codex/native.js +1 -1
- package/dist/hosts/codex/protocol.js +1 -1
- package/dist/hosts/integration/bootstrap-config.d.ts +58 -0
- package/dist/hosts/integration/bootstrap-config.js +254 -0
- package/dist/hosts/integration/bundle-export.d.ts +44 -0
- package/dist/hosts/integration/bundle-export.js +366 -3
- package/dist/hosts/integration/bundle.js +3 -0
- package/dist/hosts/integration/hook.js +36 -9
- package/dist/hosts/integration/pappra-bootstrap-extension.mjs +80 -0
- package/dist/hosts/integration/pappra-extension-runtime.mjs +59 -24631
- package/dist/hosts/integration/pappra-hook.mjs +61 -24749
- package/dist/hosts/integration/pappra-recovery-extension.mjs +259 -0
- package/dist/hosts/integration/pappra-session-transition-extension.mjs +276 -0
- package/dist/hosts/integration/pi-bootstrap-extension.d.ts +36 -0
- package/dist/hosts/integration/pi-bootstrap-extension.js +101 -0
- package/dist/hosts/integration/pi-bootstrap-guard.d.ts +125 -0
- package/dist/hosts/integration/pi-bootstrap-guard.js +438 -0
- package/dist/hosts/integration/pi-bootstrap-runtime.d.ts +63 -0
- package/dist/hosts/integration/pi-bootstrap-runtime.js +223 -0
- package/dist/hosts/integration/pi-native-events.d.ts +112 -0
- package/dist/hosts/integration/pi-native-events.js +348 -0
- package/dist/hosts/integration/pi-rollover-extension.d.ts +166 -0
- package/dist/hosts/integration/pi-rollover-extension.js +431 -0
- package/dist/hosts/integration/recovery-config.d.ts +48 -0
- package/dist/hosts/integration/recovery-config.js +117 -0
- package/dist/hosts/integration/service.d.ts +6 -1
- package/dist/hosts/integration/service.js +485 -35
- package/dist/hosts/integration/support.d.ts +7 -0
- package/dist/hosts/integration/support.js +9 -1
- package/dist/hosts/integration/templates.d.ts +3 -0
- package/dist/hosts/integration/templates.js +26 -3
- package/dist/hosts/pi/managed-host-identity.d.ts +2 -0
- package/dist/hosts/pi/managed-host-identity.js +40 -0
- package/dist/hosts/pi/managed-provider-diagnostics.d.ts +6 -0
- package/dist/hosts/pi/managed-provider-diagnostics.js +184 -0
- package/dist/hosts/pi/managed-sdk-session.d.ts +335 -0
- package/dist/hosts/pi/managed-sdk-session.js +1639 -0
- package/dist/hosts/pi/managed-session-extension.d.ts +20 -0
- package/dist/hosts/pi/managed-session-extension.js +84 -0
- package/dist/hosts/pi/managed-session.d.ts +177 -0
- package/dist/hosts/pi/managed-session.js +1557 -0
- package/dist/hosts/pi/protocol.js +1 -1
- package/dist/hosts/pi/query-result.js +1 -1
- package/dist/hosts/pi/resume-capability.d.ts +41 -0
- package/dist/hosts/pi/resume-capability.js +33 -0
- package/dist/hosts/pi/rpc.d.ts +182 -134
- package/dist/hosts/pi/rpc.js +230 -37
- package/dist/hosts/pilot.d.ts +97 -74
- package/dist/hosts/pilot.js +5 -1
- package/dist/hosts/version.d.ts +3 -0
- package/dist/hosts/version.js +18 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/infra/bounded-file.d.ts +19 -0
- package/dist/infra/bounded-file.js +66 -0
- package/dist/infra/fs.js +10 -2
- package/dist/infra/git.d.ts +29 -0
- package/dist/infra/git.js +45 -9
- package/dist/infra/json-property.d.ts +2 -0
- package/dist/infra/json-property.js +69 -0
- package/dist/infra/json.d.ts +4 -0
- package/dist/infra/json.js +24 -0
- package/dist/infra/owned-process-group.js +1 -1
- package/dist/infra/private-lock.d.ts +16 -0
- package/dist/infra/private-lock.js +148 -0
- package/dist/infra/private-state.d.ts +7 -0
- package/dist/infra/private-state.js +146 -0
- package/dist/infra/process-identity.d.ts +12 -0
- package/dist/infra/process-identity.js +142 -0
- package/dist/infra/validation.d.ts +5 -0
- package/dist/infra/validation.js +15 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +6 -0
- package/dist/install/apply.d.ts +9 -1
- package/dist/install/apply.js +176 -12
- package/dist/install/dependencies.d.ts +38 -0
- package/dist/install/dependencies.js +282 -0
- package/dist/install/ownership.js +30 -1
- package/dist/install/references.d.ts +31 -0
- package/dist/install/references.js +208 -0
- package/dist/install/repair.d.ts +37 -0
- package/dist/install/repair.js +798 -0
- package/dist/install/reset-local.d.ts +16 -0
- package/dist/install/reset-local.js +304 -0
- package/dist/install/rollback.d.ts +3 -0
- package/dist/install/rollback.js +9 -3
- package/dist/install/runtime.d.ts +10 -6
- package/dist/install/runtime.js +299 -59
- package/dist/install/source-fingerprint.d.ts +2 -0
- package/dist/install/source-fingerprint.js +103 -0
- package/dist/knowledge/catalog.d.ts +1 -0
- package/dist/knowledge/catalog.js +143 -10
- package/dist/knowledge/journal.js +17 -7
- package/dist/knowledge/paths.js +2 -1
- package/dist/knowledge/refs.js +4 -0
- package/dist/knowledge/register-batch.d.ts +4 -0
- package/dist/knowledge/register-batch.js +225 -0
- package/dist/knowledge/relocate.d.ts +5 -0
- package/dist/knowledge/relocate.js +92 -0
- package/dist/knowledge/scan.js +103 -47
- package/dist/knowledge/service.d.ts +3 -0
- package/dist/knowledge/service.js +33 -1
- package/dist/knowledge/write.d.ts +4 -1
- package/dist/knowledge/write.js +1 -1
- package/dist/mcp/server.d.ts +4 -2
- package/dist/mcp/server.js +87 -136
- package/dist/schemas/collaboration-state-validation.d.ts +6 -0
- package/dist/schemas/collaboration-state-validation.js +342 -0
- package/dist/schemas/collaboration-state.d.ts +436 -0
- package/dist/schemas/collaboration-state.js +1 -0
- package/dist/schemas/collaboration.d.ts +335 -0
- package/dist/schemas/collaboration.js +272 -0
- package/dist/schemas/continuity.d.ts +8 -0
- package/dist/schemas/continuity.js +13 -3
- package/dist/schemas/doctor.d.ts +1 -0
- package/dist/schemas/doctor.js +1 -0
- package/dist/schemas/document.d.ts +61 -0
- package/dist/schemas/document.js +9 -0
- package/dist/schemas/errors.d.ts +1 -0
- package/dist/schemas/errors.js +1 -0
- package/dist/schemas/host.d.ts +24 -0
- package/dist/schemas/host.js +19 -0
- package/dist/schemas/install.d.ts +8 -2
- package/dist/schemas/install.js +11 -1
- package/dist/schemas/managed-pi-execution.d.ts +16 -0
- package/dist/schemas/managed-pi-execution.js +2 -0
- package/dist/schemas/outcome.d.ts +9 -5
- package/dist/workspace/config-file.js +1 -3
- package/dist/workspace/documents.js +12 -2
- package/dist/workspace/repositories.d.ts +7 -0
- package/dist/workspace/repositories.js +14 -5
- package/package.json +35 -35
- package/skills/pappra/SKILL.md +28 -7
- package/skills/pappra/references/collaboration.md +633 -0
- package/skills/pappra/references/environment.md +360 -0
- package/skills/pappra/references/hosts.md +20 -0
- package/skills/pappra/references/operations.md +36 -5
- package/dist/app/collab-from.d.ts +0 -35
- package/dist/app/collab-from.js +0 -84
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { mkdir,
|
|
2
|
+
import { mkdir, unlink } from 'node:fs/promises';
|
|
3
|
+
import { ensurePrivateState } from '../infra/private-state.js';
|
|
4
|
+
import { publishPrivateLock } from '../infra/private-lock.js';
|
|
5
|
+
import { captureProcessIdentity } from '../infra/process-identity.js';
|
|
3
6
|
import { isAbsolute, join, resolve } from 'node:path';
|
|
4
7
|
import { createDiagnostic } from '../schemas/diagnostics.js';
|
|
5
8
|
import { diagnosticCodes } from '../schemas/errors.js';
|
|
6
9
|
import { checkpointPointerSchema, checkpointSchema, resumePacketSchema, taskContextSchema, } from '../schemas/continuity.js';
|
|
7
10
|
import { errorMessage, } from '../schemas/outcome.js';
|
|
8
11
|
import { isPathInside } from '../schemas/paths.js';
|
|
9
|
-
import { isTaskRecord } from '../
|
|
12
|
+
import { isTaskRecord } from '../schemas/collaboration-state-validation.js';
|
|
10
13
|
import { observePath, readFileBounded, readTextFileBounded, sha256Digest, } from '../infra/fs.js';
|
|
11
|
-
import { loadContinuityWorkspace, snapshotRepository, } from './context.js';
|
|
14
|
+
import { loadContinuityWorkspace, repositoryIdentities, snapshotRepository, } from './context.js';
|
|
12
15
|
import { continuityTaskPaths, ensureContinuityBoundary, ensurePrivateTaskBoundary, readArtifactPath, readContinuityBytes, replaceContinuityBytesIfDigest, writeContinuityBytes, } from './paths.js';
|
|
13
16
|
const MAX_ARTIFACT_BYTES = 8 * 1024 * 1024;
|
|
14
17
|
const MAX_RECORD_BYTES = 8 * 1024 * 1024;
|
|
@@ -140,6 +143,9 @@ async function acquireTaskLock(root, taskId) {
|
|
|
140
143
|
if (!boundary.ok) {
|
|
141
144
|
return { ok: false, path: paths.lockPath, message: boundary.message };
|
|
142
145
|
}
|
|
146
|
+
const privateState = await ensurePrivateState(root);
|
|
147
|
+
if (!privateState.ok)
|
|
148
|
+
return { ok: false, path: paths.lockPath, message: privateState.message };
|
|
143
149
|
try {
|
|
144
150
|
await mkdir(paths.taskDir, { recursive: true, mode: 0o700 });
|
|
145
151
|
}
|
|
@@ -151,17 +157,15 @@ async function acquireTaskLock(root, taskId) {
|
|
|
151
157
|
};
|
|
152
158
|
}
|
|
153
159
|
const token = randomUUID();
|
|
154
|
-
let handle;
|
|
155
160
|
try {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
+
await publishPrivateLock(paths.lockPath, Buffer.from(`${JSON.stringify({ token, pid: process.pid, process_identity: captureProcessIdentity() ?? undefined, createdAt: new Date().toISOString() })}\n`), async () => {
|
|
162
|
+
const current = await ensurePrivateTaskBoundary(root, taskId, paths.lockPath);
|
|
163
|
+
if (!current.ok)
|
|
164
|
+
throw new Error(current.message);
|
|
165
|
+
});
|
|
161
166
|
return { ok: true, path: paths.lockPath, token };
|
|
162
167
|
}
|
|
163
168
|
catch (error) {
|
|
164
|
-
await handle?.close().catch(() => undefined);
|
|
165
169
|
return {
|
|
166
170
|
ok: false,
|
|
167
171
|
path: paths.lockPath,
|
|
@@ -461,6 +465,25 @@ function boundedArray(values) {
|
|
|
461
465
|
? { values: values.slice(0, 16), truncated: true }
|
|
462
466
|
: { values: [...values], truncated: false };
|
|
463
467
|
}
|
|
468
|
+
function boundedCoverageIds(values) {
|
|
469
|
+
const unique = [...new Set(values)].sort();
|
|
470
|
+
const shown = unique
|
|
471
|
+
.slice(0, 8)
|
|
472
|
+
.map((value) => (value.length > 200 ? `${value.slice(0, 197)}...` : value));
|
|
473
|
+
const text = `${shown.join(', ')}${unique.length > shown.length ? `, ... (${unique.length - shown.length} more)` : ''}`;
|
|
474
|
+
return text.length > 900 ? `${text.slice(0, 897)}...` : text;
|
|
475
|
+
}
|
|
476
|
+
function repositoryCoverageLimitations(workspace) {
|
|
477
|
+
const limitations = [];
|
|
478
|
+
if (workspace.unresolvedRepositories.length > 0) {
|
|
479
|
+
const entries = workspace.unresolvedRepositories.map((entry) => `${entry.id} (${entry.configuredPath})`);
|
|
480
|
+
limitations.push(`Repository coverage incomplete: ${entries.length} configured repositories unresolved: ${boundedCoverageIds(entries)}.`);
|
|
481
|
+
}
|
|
482
|
+
if (workspace.discoveryTruncated) {
|
|
483
|
+
limitations.push('Repository discovery was truncated; configured/resolved coverage is incomplete.');
|
|
484
|
+
}
|
|
485
|
+
return limitations;
|
|
486
|
+
}
|
|
464
487
|
export class CheckpointService {
|
|
465
488
|
root;
|
|
466
489
|
#options;
|
|
@@ -513,6 +536,20 @@ export class CheckpointService {
|
|
|
513
536
|
};
|
|
514
537
|
}
|
|
515
538
|
const paths = continuityTaskPaths(workspace.root, input.taskId);
|
|
539
|
+
if (workspace.repositories.length > 64) {
|
|
540
|
+
const released = await releaseTaskLock(lock.path, lock.token);
|
|
541
|
+
return {
|
|
542
|
+
ok: false,
|
|
543
|
+
status: 'failed',
|
|
544
|
+
checkpoint: null,
|
|
545
|
+
checkpointPath: null,
|
|
546
|
+
latestPath: paths.latestPath,
|
|
547
|
+
diagnostics: [
|
|
548
|
+
diag(diagnosticCodes.document_record_invalid, `Repository coverage has ${workspace.repositories.length} resolved entries; the checkpoint schema supports at most 64. No checkpoint pointer was advanced.`, paths.contextPath, 'Reduce the configured/resolved repository set or declare a later coverage scope; semantic context was not dropped silently.'),
|
|
549
|
+
],
|
|
550
|
+
residualPaths: released.ok ? [] : [lock.path],
|
|
551
|
+
};
|
|
552
|
+
}
|
|
516
553
|
const now = new Date().toISOString();
|
|
517
554
|
let checkpointPath = null;
|
|
518
555
|
let result;
|
|
@@ -602,8 +639,9 @@ export class CheckpointService {
|
|
|
602
639
|
}
|
|
603
640
|
if (result === undefined) {
|
|
604
641
|
const observedRepositories = [];
|
|
642
|
+
const identities = repositoryIdentities(workspace.repositories, workspace.config.repositories.map((repository) => repository.id));
|
|
605
643
|
for (const [index, repository,] of workspace.repositories.entries()) {
|
|
606
|
-
const snapshot = await snapshotRepository(workspace, repository, index);
|
|
644
|
+
const snapshot = await snapshotRepository(workspace, repository, index, identities[index]);
|
|
607
645
|
if (snapshot.patchBytes !== null &&
|
|
608
646
|
snapshot.record.patchDigest !== null) {
|
|
609
647
|
const patch = await writePrivatePatch(workspace, input.taskId, snapshot.patchBytes, snapshot.record.patchDigest);
|
|
@@ -643,7 +681,15 @@ export class CheckpointService {
|
|
|
643
681
|
...(input.attempted ?? []),
|
|
644
682
|
...(input.nextActions ?? []),
|
|
645
683
|
].length > 0;
|
|
646
|
-
const
|
|
684
|
+
const coverageLimitations = repositoryCoverageLimitations(workspace);
|
|
685
|
+
const coverageIncomplete = coverageLimitations.length > 0;
|
|
686
|
+
const combinedLimitations = [
|
|
687
|
+
...(input.limitations ?? []),
|
|
688
|
+
...coverageLimitations,
|
|
689
|
+
];
|
|
690
|
+
const contextCompleteness = semanticPresent &&
|
|
691
|
+
input.contextCompleteness !== 'partial' &&
|
|
692
|
+
!coverageIncomplete
|
|
647
693
|
? 'complete'
|
|
648
694
|
: 'partial';
|
|
649
695
|
if (!semanticPresent) {
|
|
@@ -652,6 +698,10 @@ export class CheckpointService {
|
|
|
652
698
|
: 'Checkpoint has no semantic decisions, attempted work or next actions; stored as partial.', continuityTaskPaths(workspace.root, input.taskId)
|
|
653
699
|
.contextPath, 'Add an explicit semantic summary before claiming complete recovery context.'));
|
|
654
700
|
}
|
|
701
|
+
if (coverageIncomplete) {
|
|
702
|
+
saveDiagnostics.push(diag(diagnosticCodes.document_write_partial, `Checkpoint capture has incomplete repository coverage: ${boundedCoverageIds(workspace.unresolvedRepositories.map((entry) => `${entry.id} (${entry.configuredPath})`))}${workspace.discoveryTruncated ? '; discovery was truncated' : ''}.`, continuityTaskPaths(workspace.root, input.taskId)
|
|
703
|
+
.contextPath, 'Inspect configured repositories; the checkpoint is partial and does not claim complete coverage.'));
|
|
704
|
+
}
|
|
655
705
|
const checkpoint = {
|
|
656
706
|
schema: 'pappra/checkpoint/1',
|
|
657
707
|
checkpointId,
|
|
@@ -669,7 +719,7 @@ export class CheckpointService {
|
|
|
669
719
|
decisions: [...(input.decisions ?? [])],
|
|
670
720
|
attempted: [...(input.attempted ?? [])],
|
|
671
721
|
nextActions: [...(input.nextActions ?? [])],
|
|
672
|
-
limitations:
|
|
722
|
+
limitations: combinedLimitations,
|
|
673
723
|
repositories: observedRepositories,
|
|
674
724
|
artifacts: artifacts.artifacts,
|
|
675
725
|
validations: (input.validations ?? []).map((validation) => ({
|
|
@@ -978,10 +1028,30 @@ export class CheckpointService {
|
|
|
978
1028
|
},
|
|
979
1029
|
];
|
|
980
1030
|
const currentRepositories = new Map();
|
|
1031
|
+
const currentIdentities = repositoryIdentities(workspace.repositories, workspace.config.repositories.map((repository) => repository.id));
|
|
981
1032
|
for (const [index, repository] of workspace.repositories.entries()) {
|
|
982
|
-
const snapshot = await snapshotRepository(workspace, repository, index);
|
|
1033
|
+
const snapshot = await snapshotRepository(workspace, repository, index, currentIdentities[index]);
|
|
983
1034
|
currentRepositories.set(snapshot.record.repoId, snapshot.record);
|
|
984
1035
|
}
|
|
1036
|
+
const storedRepositoryIds = new Set(checkpoint.repositories.map((repository) => repository.repoId));
|
|
1037
|
+
const currentOnly = [...currentRepositories.keys()]
|
|
1038
|
+
.filter((repoId) => !storedRepositoryIds.has(repoId))
|
|
1039
|
+
.sort();
|
|
1040
|
+
const unresolvedIds = workspace.unresolvedRepositories.map((entry) => `${entry.id} (${entry.configuredPath})`);
|
|
1041
|
+
const coverageParts = [];
|
|
1042
|
+
if (unresolvedIds.length > 0) {
|
|
1043
|
+
coverageParts.push(`configured but unresolved: ${boundedCoverageIds(unresolvedIds)}`);
|
|
1044
|
+
}
|
|
1045
|
+
if (currentOnly.length > 0) {
|
|
1046
|
+
coverageParts.push(`current-only: ${boundedCoverageIds(currentOnly)}`);
|
|
1047
|
+
}
|
|
1048
|
+
if (workspace.discoveryTruncated) {
|
|
1049
|
+
coverageParts.push('discovery was truncated');
|
|
1050
|
+
}
|
|
1051
|
+
const coverageMessage = coverageParts.length === 0
|
|
1052
|
+
? null
|
|
1053
|
+
: `Repository coverage is incomplete: ${coverageParts.join('; ')}.`;
|
|
1054
|
+
const coverageUnknown = coverageMessage !== null;
|
|
985
1055
|
const repositoryDrift = [];
|
|
986
1056
|
for (const stored of checkpoint.repositories) {
|
|
987
1057
|
const patchPath = stored.patchDigest === null
|
|
@@ -1072,13 +1142,16 @@ export class CheckpointService {
|
|
|
1072
1142
|
detail,
|
|
1073
1143
|
});
|
|
1074
1144
|
}
|
|
1075
|
-
const
|
|
1145
|
+
const driftStatus = repositoryDrift.some((entry) => entry.status === 'relocated')
|
|
1076
1146
|
? 'relocated'
|
|
1077
1147
|
: repositoryDrift.some((entry) => entry.status === 'changed')
|
|
1078
1148
|
? 'changed'
|
|
1079
1149
|
: repositoryDrift.some((entry) => entry.status === 'missing' || entry.status === 'unknown')
|
|
1080
1150
|
? 'unknown'
|
|
1081
1151
|
: 'unchanged';
|
|
1152
|
+
const codeStatus = coverageUnknown
|
|
1153
|
+
? 'unknown'
|
|
1154
|
+
: driftStatus;
|
|
1082
1155
|
const artifactChecks = [];
|
|
1083
1156
|
for (const artifact of checkpoint.artifacts) {
|
|
1084
1157
|
const resolved = await readArtifactPath(workspace.root, artifact.path);
|
|
@@ -1129,6 +1202,9 @@ export class CheckpointService {
|
|
|
1129
1202
|
entry.patchStatus !== 'not-applicable')) {
|
|
1130
1203
|
pushBlock('private_patch_unavailable', 'A private patch is missing, changed or unsafe; verification is not current.');
|
|
1131
1204
|
}
|
|
1205
|
+
if (coverageMessage !== null) {
|
|
1206
|
+
pushBlock('repository_coverage_incomplete', coverageMessage);
|
|
1207
|
+
}
|
|
1132
1208
|
if (repositoryDrift.some((entry) => entry.storedCaptureStatus !== 'complete' ||
|
|
1133
1209
|
entry.currentCaptureStatus !== 'complete')) {
|
|
1134
1210
|
pushBlock('snapshot_incomplete', 'Repository capture was partial or unknown; current verification is not established.');
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const TASK_PIN_SCHEMA = "pappra/task-pin/1";
|
|
2
|
+
export declare const TASK_PREFERENCES_SCHEMA = "pappra/task-preferences/1";
|
|
3
|
+
export interface TaskPin {
|
|
4
|
+
readonly schema: typeof TASK_PIN_SCHEMA;
|
|
5
|
+
readonly taskId: string;
|
|
6
|
+
readonly pinnedAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TaskPinFailure {
|
|
9
|
+
readonly ok: false;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function readTaskPin(root: string): Promise<TaskPin | null>;
|
|
13
|
+
export declare function pinTask(root: string, taskId: string): Promise<TaskPin | TaskPinFailure>;
|
|
14
|
+
export declare function unpinTask(root: string): Promise<{
|
|
15
|
+
ok: true;
|
|
16
|
+
} | TaskPinFailure>;
|
|
17
|
+
/**
|
|
18
|
+
* Stores the personal hook preference in ignored checkout-local state. Shared
|
|
19
|
+
* workspace configuration is read for identity but is never rewritten.
|
|
20
|
+
*/
|
|
21
|
+
export declare function setAutoResume(root: string, enabled: boolean): Promise<{
|
|
22
|
+
ok: true;
|
|
23
|
+
} | TaskPinFailure>;
|
|
24
|
+
export declare function readAutoResume(root: string): Promise<boolean>;
|