@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
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type SessionContext = {
|
|
2
|
+
cwd: string;
|
|
3
|
+
sessionManager: {
|
|
4
|
+
getSessionFile(): string | null | undefined;
|
|
5
|
+
getSessionId(): string;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
type InputEvent = {
|
|
9
|
+
text: string;
|
|
10
|
+
source?: string;
|
|
11
|
+
streamingBehavior?: string;
|
|
12
|
+
};
|
|
13
|
+
type ManagedExtensionApi = {
|
|
14
|
+
on(event: 'session_start' | 'session_shutdown' | 'agent_settled', handler: (_event: unknown, context: SessionContext) => void): unknown;
|
|
15
|
+
on(event: 'input', handler: (event: InputEvent) => {
|
|
16
|
+
action: 'continue' | 'handled';
|
|
17
|
+
} | void): unknown;
|
|
18
|
+
};
|
|
19
|
+
export default function managedPiSessionExtension(pi: ManagedExtensionApi): void;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
const METADATA_ENV = 'PAPPRA_MANAGED_PI_METADATA_FILE';
|
|
4
|
+
const SCHEMA = 'harness-collab/pi-managed-session/1';
|
|
5
|
+
function appendMetadata(record) {
|
|
6
|
+
const file = process.env[METADATA_ENV];
|
|
7
|
+
if (!file || !file.startsWith('/'))
|
|
8
|
+
return false;
|
|
9
|
+
let fd;
|
|
10
|
+
try {
|
|
11
|
+
fd = fs.openSync(file, 'a', 0o600);
|
|
12
|
+
const line = Buffer.from(`${JSON.stringify(record)}\n`, 'utf8');
|
|
13
|
+
let written = 0;
|
|
14
|
+
while (written < line.length) {
|
|
15
|
+
written += fs.writeSync(fd, line, written, line.length - written);
|
|
16
|
+
}
|
|
17
|
+
fs.fsyncSync(fd);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
if (fd !== undefined) {
|
|
25
|
+
try {
|
|
26
|
+
fs.closeSync(fd);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// The record was either persisted or its caller observes failure.
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function sessionStartRecord(context) {
|
|
35
|
+
return {
|
|
36
|
+
schema: SCHEMA,
|
|
37
|
+
type: 'session_start',
|
|
38
|
+
at: new Date().toISOString(),
|
|
39
|
+
cwd: context.cwd,
|
|
40
|
+
session_file: context.sessionManager.getSessionFile() ?? null,
|
|
41
|
+
session_id: context.sessionManager.getSessionId(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export default function managedPiSessionExtension(pi) {
|
|
45
|
+
pi.on('session_start', (_event, context) => {
|
|
46
|
+
appendMetadata(sessionStartRecord(context));
|
|
47
|
+
});
|
|
48
|
+
pi.on('agent_settled', (_event, context) => {
|
|
49
|
+
appendMetadata({
|
|
50
|
+
schema: SCHEMA,
|
|
51
|
+
type: 'agent_settled',
|
|
52
|
+
session_id: context.sessionManager.getSessionId(),
|
|
53
|
+
cwd: context.cwd,
|
|
54
|
+
session_file: context.sessionManager.getSessionFile() ?? null,
|
|
55
|
+
at: new Date().toISOString(),
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
pi.on('session_shutdown', (_event, context) => {
|
|
59
|
+
appendMetadata({
|
|
60
|
+
schema: SCHEMA,
|
|
61
|
+
type: 'session_shutdown_observed',
|
|
62
|
+
at: new Date().toISOString(),
|
|
63
|
+
cwd: context.cwd,
|
|
64
|
+
session_file: context.sessionManager.getSessionFile() ?? null,
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
pi.on('input', (event) => {
|
|
68
|
+
const text = typeof event.text === 'string' ? event.text : '';
|
|
69
|
+
const persisted = appendMetadata({
|
|
70
|
+
schema: SCHEMA,
|
|
71
|
+
type: 'input_event_observed',
|
|
72
|
+
at: new Date().toISOString(),
|
|
73
|
+
source: typeof event.source === 'string' ? event.source : 'unknown',
|
|
74
|
+
streaming_behavior: typeof event.streamingBehavior === 'string'
|
|
75
|
+
? event.streamingBehavior
|
|
76
|
+
: null,
|
|
77
|
+
text_sha256: createHash('sha256').update(text, 'utf8').digest('hex'),
|
|
78
|
+
text_utf8_bytes: Buffer.byteLength(text, 'utf8'),
|
|
79
|
+
});
|
|
80
|
+
// The PTY ingress has already been write-ahead journaled. If the semantic observation
|
|
81
|
+
// cannot be persisted, do not let this input proceed without its controller evidence.
|
|
82
|
+
return { action: persisted ? 'continue' : 'handled' };
|
|
83
|
+
});
|
|
84
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
export declare const MANAGED_PI_SESSION_SCHEMA: 'harness-collab/pi-managed-session/1';
|
|
2
|
+
/** Launch a fresh interactive TUI using normal Pi configuration and an explicit OpenRouter model. */
|
|
3
|
+
export interface ManagedPiSessionOptions {
|
|
4
|
+
readonly cwd: string;
|
|
5
|
+
readonly model: string;
|
|
6
|
+
readonly journalPath: string;
|
|
7
|
+
readonly controlSocketPath?: string;
|
|
8
|
+
readonly piBin?: string;
|
|
9
|
+
readonly pythonBin?: string;
|
|
10
|
+
readonly shutdownGraceMs?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ManagedPiProcessIdentity {
|
|
13
|
+
readonly runId: string;
|
|
14
|
+
readonly helperPid: number;
|
|
15
|
+
readonly piPid: number;
|
|
16
|
+
readonly sessionId: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ManagedPiControlEndpoint {
|
|
19
|
+
readonly socketPath: string;
|
|
20
|
+
readonly descriptorPath: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ManagedPiSessionExit {
|
|
23
|
+
readonly status: 'exited' | 'unknown';
|
|
24
|
+
readonly piPid: number;
|
|
25
|
+
readonly exitCode: number | null;
|
|
26
|
+
readonly signal: string | null;
|
|
27
|
+
readonly helperExitCode: number | null;
|
|
28
|
+
readonly helperSignal: string | null;
|
|
29
|
+
readonly reason: string | null;
|
|
30
|
+
}
|
|
31
|
+
export interface ManagedPiTranscriptObservation {
|
|
32
|
+
readonly status: 'verified' | 'not_observed' | 'mismatch' | 'unreadable';
|
|
33
|
+
readonly path: string | null;
|
|
34
|
+
readonly sessionId: string | null;
|
|
35
|
+
readonly cwd: string | null;
|
|
36
|
+
readonly sha256: string | null;
|
|
37
|
+
readonly bytes: number | null;
|
|
38
|
+
readonly detail: string | null;
|
|
39
|
+
}
|
|
40
|
+
export interface ManagedPiSessionSnapshot {
|
|
41
|
+
readonly schema: typeof MANAGED_PI_SESSION_SCHEMA;
|
|
42
|
+
readonly runId: string;
|
|
43
|
+
readonly provider: 'openrouter';
|
|
44
|
+
readonly model: string;
|
|
45
|
+
readonly cwd: string;
|
|
46
|
+
readonly sessionId: string;
|
|
47
|
+
readonly process: ManagedPiProcessIdentity;
|
|
48
|
+
readonly processExit: ManagedPiSessionExit | null;
|
|
49
|
+
readonly readiness: {
|
|
50
|
+
readonly ownedPiChild: 'started';
|
|
51
|
+
readonly extensionSessionStart: 'observed';
|
|
52
|
+
readonly terminalUiRender: 'not_observed';
|
|
53
|
+
};
|
|
54
|
+
readonly ingress: {
|
|
55
|
+
readonly state: 'open' | 'fenced';
|
|
56
|
+
readonly journalPath: string;
|
|
57
|
+
readonly sequence: number;
|
|
58
|
+
readonly headDigest: string;
|
|
59
|
+
readonly healthy: boolean;
|
|
60
|
+
readonly rawTerminalInputJournaled: false;
|
|
61
|
+
readonly terminalInputMetadataJournaled: true;
|
|
62
|
+
};
|
|
63
|
+
readonly transcript: ManagedPiTranscriptObservation;
|
|
64
|
+
readonly nativeInventory: {
|
|
65
|
+
readonly queuedMessages: 'unknown';
|
|
66
|
+
readonly approvals: 'unknown';
|
|
67
|
+
readonly inFlightWork: 'unknown';
|
|
68
|
+
readonly externalWriters: 'unknown';
|
|
69
|
+
readonly descendants: 'uncontrolled';
|
|
70
|
+
};
|
|
71
|
+
readonly transferReady: false;
|
|
72
|
+
readonly blockers: readonly string[];
|
|
73
|
+
}
|
|
74
|
+
export interface ManagedPiReceiverConfirmation {
|
|
75
|
+
readonly receiverSessionId: string;
|
|
76
|
+
readonly confirmationId: string;
|
|
77
|
+
readonly confirmedAt: string;
|
|
78
|
+
}
|
|
79
|
+
export interface ManagedPiFirstWorkObservation {
|
|
80
|
+
readonly receiverSessionId: string;
|
|
81
|
+
readonly workId: string;
|
|
82
|
+
readonly observedAt: string;
|
|
83
|
+
}
|
|
84
|
+
export type ManagedPiArchiveResult = {
|
|
85
|
+
readonly ok: true;
|
|
86
|
+
readonly archivePath: string;
|
|
87
|
+
readonly sha256: string;
|
|
88
|
+
readonly bytes: number;
|
|
89
|
+
} | {
|
|
90
|
+
readonly ok: false;
|
|
91
|
+
readonly reason: string;
|
|
92
|
+
};
|
|
93
|
+
export interface ManagedPiSession {
|
|
94
|
+
readonly identity: ManagedPiProcessIdentity;
|
|
95
|
+
readonly journalPath: string;
|
|
96
|
+
readonly controlEndpoint: ManagedPiControlEndpoint;
|
|
97
|
+
waitForExit(): Promise<ManagedPiSessionExit>;
|
|
98
|
+
snapshot(): ManagedPiSessionSnapshot;
|
|
99
|
+
fenceIngress(reason?: string): void;
|
|
100
|
+
stopOwnedChild(): Promise<ManagedPiSessionExit>;
|
|
101
|
+
archiveOriginalTranscript(input: {
|
|
102
|
+
readonly destinationPath: string;
|
|
103
|
+
readonly receiverConfirmation: ManagedPiReceiverConfirmation;
|
|
104
|
+
readonly firstWork: ManagedPiFirstWorkObservation;
|
|
105
|
+
}): ManagedPiArchiveResult;
|
|
106
|
+
close(): void;
|
|
107
|
+
}
|
|
108
|
+
export declare class ManagedPiSessionError extends Error {
|
|
109
|
+
readonly code: string;
|
|
110
|
+
constructor(code: string, message?: string);
|
|
111
|
+
}
|
|
112
|
+
interface JournalRecord {
|
|
113
|
+
readonly schema: typeof MANAGED_PI_SESSION_SCHEMA;
|
|
114
|
+
readonly run_id: string;
|
|
115
|
+
readonly sequence: number;
|
|
116
|
+
readonly at: string;
|
|
117
|
+
readonly kind: string;
|
|
118
|
+
readonly previous_digest: string;
|
|
119
|
+
readonly digest: string;
|
|
120
|
+
readonly [key: string]: unknown;
|
|
121
|
+
}
|
|
122
|
+
/** Fsync-backed, hash-chained journal. */
|
|
123
|
+
export declare class ManagedPiJournal {
|
|
124
|
+
readonly path: string;
|
|
125
|
+
private readonly fd;
|
|
126
|
+
private readonly runId;
|
|
127
|
+
private sequence;
|
|
128
|
+
private headDigest;
|
|
129
|
+
private failure;
|
|
130
|
+
private isClosed;
|
|
131
|
+
private isFenced;
|
|
132
|
+
constructor(path: string, fd: number, runId: string);
|
|
133
|
+
get healthy(): boolean;
|
|
134
|
+
get fenced(): boolean;
|
|
135
|
+
get currentSequence(): number;
|
|
136
|
+
get currentDigest(): string;
|
|
137
|
+
append(kind: string, fields?: Record<string, unknown>): JournalRecord;
|
|
138
|
+
fence(reason: string): void;
|
|
139
|
+
close(): void;
|
|
140
|
+
}
|
|
141
|
+
/** Write-ahead admission metadata, without retaining terminal input or secrets. */
|
|
142
|
+
export declare function forwardJournaledManagedInput(journal: ManagedPiJournal, chunk: Uint8Array, forward: (bytes: Uint8Array) => void): boolean;
|
|
143
|
+
export declare function buildManagedPiArgv(input: {
|
|
144
|
+
readonly model: string;
|
|
145
|
+
readonly sessionId: string;
|
|
146
|
+
readonly extensionPath: string;
|
|
147
|
+
}): string[];
|
|
148
|
+
interface ProcessEventIdentity {
|
|
149
|
+
readonly runId: string;
|
|
150
|
+
readonly helperPid: number;
|
|
151
|
+
readonly piPid: number;
|
|
152
|
+
}
|
|
153
|
+
interface PiExitEvent extends ProcessEventIdentity {
|
|
154
|
+
readonly exitCode: number | null;
|
|
155
|
+
readonly signal: string | null;
|
|
156
|
+
}
|
|
157
|
+
/** Exit receipts from the bridge count only when all child identity fields match. */
|
|
158
|
+
export declare function isOwnedManagedPiExit(event: PiExitEvent, identity: ProcessEventIdentity): boolean;
|
|
159
|
+
/** @internal: exercised by the owned PTY bridge regression test. */
|
|
160
|
+
export declare const managedPiPtyBridgeSourceForTests: string;
|
|
161
|
+
export interface ManagedPiJournalArtifacts {
|
|
162
|
+
readonly journal: ManagedPiJournal;
|
|
163
|
+
readonly metadataPath: string;
|
|
164
|
+
}
|
|
165
|
+
/** Create private, exclusive journal and Pi observer metadata artifacts for SDK mode. */
|
|
166
|
+
export declare function createManagedPiJournalArtifacts(journalPath: string, runId?: `${string}-${string}-${string}-${string}-${string}`): ManagedPiJournalArtifacts;
|
|
167
|
+
export declare function validateManagedPiArchiveEvidence(input: {
|
|
168
|
+
readonly sourceExited: boolean;
|
|
169
|
+
readonly transcript: ManagedPiTranscriptObservation;
|
|
170
|
+
readonly receiverConfirmation: ManagedPiReceiverConfirmation;
|
|
171
|
+
readonly firstWork: ManagedPiFirstWorkObservation;
|
|
172
|
+
}): string | null;
|
|
173
|
+
/** Cross-process client for the private descriptor written beside the journal. */
|
|
174
|
+
export declare function requestManagedPiControl(descriptorPath: string, action: 'snapshot' | 'fence' | 'stop' | 'deliver', payload?: Readonly<Record<string, unknown>>): Promise<Record<string, unknown>>;
|
|
175
|
+
/** Start Pi as an owned visible TUI; its native screen is passed directly through the PTY. */
|
|
176
|
+
export declare function startManagedPiSession(options: ManagedPiSessionOptions): Promise<ManagedPiSession>;
|
|
177
|
+
export {};
|