@namzu/cli 26.3.0 → 27.0.0
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/CHANGELOG.md +214 -0
- package/README.md +49 -34
- package/dist/bin.js +7 -0
- package/dist/bin.js.map +1 -1
- package/dist/checkpoints/store.d.ts +17 -4
- package/dist/checkpoints/store.d.ts.map +1 -1
- package/dist/checkpoints/store.js +20 -5
- package/dist/checkpoints/store.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/acp.d.ts +23 -1
- package/dist/commands/acp.d.ts.map +1 -1
- package/dist/commands/acp.js +41 -2
- package/dist/commands/acp.js.map +1 -1
- package/dist/commands/drain.d.ts +69 -2
- package/dist/commands/drain.d.ts.map +1 -1
- package/dist/commands/drain.js +214 -134
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/eval.js +1 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/provider-wait.d.ts +5 -5
- package/dist/commands/provider-wait.d.ts.map +1 -1
- package/dist/commands/provider-wait.js +2 -2
- package/dist/commands/resident.d.ts.map +1 -1
- package/dist/commands/resident.js +2 -1
- package/dist/commands/resident.js.map +1 -1
- package/dist/commands/run-flags.d.ts +7 -7
- package/dist/commands/run-flags.js +4 -4
- package/dist/commands/run-stream.d.ts +16 -12
- package/dist/commands/run-stream.d.ts.map +1 -1
- package/dist/commands/run-stream.js +142 -98
- package/dist/commands/run-stream.js.map +1 -1
- package/dist/commands/run.d.ts +6 -4
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +129 -45
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/serve.js +2 -2
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/state.js +8 -8
- package/dist/commands/state.js.map +1 -1
- package/dist/config/load.d.ts +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +17 -5
- package/dist/config/load.js.map +1 -1
- package/dist/config/run-limits.d.ts +20 -8
- package/dist/config/run-limits.d.ts.map +1 -1
- package/dist/config/run-limits.js +28 -46
- package/dist/config/run-limits.js.map +1 -1
- package/dist/config/schema.d.ts +44 -19
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/tool-result-screens.js +1 -1
- package/dist/context/directories.d.ts +37 -0
- package/dist/context/directories.d.ts.map +1 -0
- package/dist/context/directories.js +69 -0
- package/dist/context/directories.js.map +1 -0
- package/dist/context/environment.d.ts +55 -0
- package/dist/context/environment.d.ts.map +1 -1
- package/dist/context/environment.js +96 -0
- package/dist/context/environment.js.map +1 -1
- package/dist/context/project-tracker.d.ts +3 -3
- package/dist/context/project-tracker.d.ts.map +1 -1
- package/dist/context/project-tracker.js +3 -3
- package/dist/context/project-tracker.js.map +1 -1
- package/dist/context/project.d.ts +1 -1
- package/dist/context/project.js +1 -1
- package/dist/context/sandbox.d.ts +22 -3
- package/dist/context/sandbox.d.ts.map +1 -1
- package/dist/context/sandbox.js +42 -4
- package/dist/context/sandbox.js.map +1 -1
- package/dist/doctor/checks/chain.d.ts +1 -1
- package/dist/doctor/checks/chain.js +5 -5
- package/dist/doctor/checks/chain.js.map +1 -1
- package/dist/doctor/checks/invariants.d.ts +2 -2
- package/dist/doctor/checks/invariants.js +5 -5
- package/dist/doctor/checks/invariants.js.map +1 -1
- package/dist/doctor/checks/logging.js +1 -1
- package/dist/doctor/checks/logging.js.map +1 -1
- package/dist/doctor/checks/sandbox.js +1 -1
- package/dist/doctor/checks/sandbox.js.map +1 -1
- package/dist/doctor/checks/session-export.d.ts +1 -1
- package/dist/doctor/checks/session-export.js +2 -2
- package/dist/doctor/checks/session-export.js.map +1 -1
- package/dist/doctor/checks/telemetry.d.ts +1 -1
- package/dist/doctor/checks/telemetry.js +1 -1
- package/dist/doctor/registry.js +2 -2
- package/dist/doctor/registry.js.map +1 -1
- package/dist/exit-codes.d.ts +2 -2
- package/dist/exit-codes.js +2 -2
- package/dist/integrations/mcp/servers.d.ts +1 -1
- package/dist/integrations/providers/chain-capabilities.d.ts +6 -6
- package/dist/integrations/providers/chain-capabilities.js +8 -8
- package/dist/integrations/providers/chain-capabilities.js.map +1 -1
- package/dist/integrations/providers/register.d.ts +1 -1
- package/dist/integrations/providers/register.js +1 -1
- package/dist/integrations/providers/registry.d.ts +1 -1
- package/dist/integrations/resident/inspection.d.ts +4 -1
- package/dist/integrations/resident/inspection.d.ts.map +1 -1
- package/dist/integrations/resident/inspection.js +53 -34
- package/dist/integrations/resident/inspection.js.map +1 -1
- package/dist/integrations/resident/learning-storage.d.ts +7 -2
- package/dist/integrations/resident/learning-storage.d.ts.map +1 -1
- package/dist/integrations/resident/learning-storage.js +12 -8
- package/dist/integrations/resident/learning-storage.js.map +1 -1
- package/dist/integrations/resident/runner-store.d.ts +1 -1
- package/dist/integrations/resident/runner-store.d.ts.map +1 -1
- package/dist/integrations/resident/runner-store.js +5 -2
- package/dist/integrations/resident/runner-store.js.map +1 -1
- package/dist/integrations/resident/runner-worker.js +1 -0
- package/dist/integrations/resident/runner-worker.js.map +1 -1
- package/dist/integrations/resident/session-log-reads.d.ts +37 -0
- package/dist/integrations/resident/session-log-reads.d.ts.map +1 -0
- package/dist/integrations/resident/session-log-reads.js +125 -0
- package/dist/integrations/resident/session-log-reads.js.map +1 -0
- package/dist/integrations/resident/session-step.d.ts +2 -0
- package/dist/integrations/resident/session-step.d.ts.map +1 -1
- package/dist/integrations/resident/session-step.js +15 -13
- package/dist/integrations/resident/session-step.js.map +1 -1
- package/dist/integrations/resident/storage.d.ts +23 -1
- package/dist/integrations/resident/storage.d.ts.map +1 -1
- package/dist/integrations/resident/storage.js +60 -17
- package/dist/integrations/resident/storage.js.map +1 -1
- package/dist/integrations/resident/tool-evidence.d.ts +4 -2
- package/dist/integrations/resident/tool-evidence.d.ts.map +1 -1
- package/dist/integrations/resident/tool-evidence.js +36 -30
- package/dist/integrations/resident/tool-evidence.js.map +1 -1
- package/dist/integrations/resident/verification.d.ts +2 -2
- package/dist/integrations/resident/verification.d.ts.map +1 -1
- package/dist/integrations/resident/verification.js +4 -4
- package/dist/integrations/resident/verification.js.map +1 -1
- package/dist/integrations/sessions/checkpoint-view.d.ts +13 -0
- package/dist/integrations/sessions/checkpoint-view.d.ts.map +1 -0
- package/dist/integrations/sessions/checkpoint-view.js +48 -0
- package/dist/integrations/sessions/checkpoint-view.js.map +1 -0
- package/dist/integrations/sessions/context-inventory.js +1 -1
- package/dist/integrations/sessions/context-inventory.js.map +1 -1
- package/dist/integrations/sessions/conversation-search.d.ts +16 -20
- package/dist/integrations/sessions/conversation-search.d.ts.map +1 -1
- package/dist/integrations/sessions/conversation-search.js +305 -731
- package/dist/integrations/sessions/conversation-search.js.map +1 -1
- package/dist/integrations/sessions/evidence-page-validation.d.ts +4 -4
- package/dist/integrations/sessions/evidence-page-validation.d.ts.map +1 -1
- package/dist/integrations/sessions/evidence-page-validation.js +1 -1
- package/dist/integrations/sessions/evidence-page-validation.js.map +1 -1
- package/dist/integrations/sessions/evidence-recall.d.ts +40 -2
- package/dist/integrations/sessions/evidence-recall.d.ts.map +1 -1
- package/dist/integrations/sessions/evidence-recall.js +41 -97
- package/dist/integrations/sessions/evidence-recall.js.map +1 -1
- package/dist/integrations/sessions/store.d.ts +153 -85
- package/dist/integrations/sessions/store.d.ts.map +1 -1
- package/dist/integrations/sessions/store.js +414 -484
- package/dist/integrations/sessions/store.js.map +1 -1
- package/dist/integrations/sessions/task-context.d.ts +15 -2
- package/dist/integrations/sessions/task-context.d.ts.map +1 -1
- package/dist/integrations/sessions/task-context.js +34 -11
- package/dist/integrations/sessions/task-context.js.map +1 -1
- package/dist/integrations/sessions/transcript-export.d.ts +13 -6
- package/dist/integrations/sessions/transcript-export.d.ts.map +1 -1
- package/dist/integrations/sessions/transcript-export.js +148 -263
- package/dist/integrations/sessions/transcript-export.js.map +1 -1
- package/dist/integrations/state/home.d.ts +4 -16
- package/dist/integrations/state/home.d.ts.map +1 -1
- package/dist/integrations/state/home.js +6 -42
- package/dist/integrations/state/home.js.map +1 -1
- package/dist/integrations/state/project.d.ts +6 -7
- package/dist/integrations/state/project.d.ts.map +1 -1
- package/dist/integrations/state/project.js +7 -9
- package/dist/integrations/state/project.js.map +1 -1
- package/dist/integrations/state/report.d.ts +27 -41
- package/dist/integrations/state/report.d.ts.map +1 -1
- package/dist/integrations/state/report.js +172 -464
- package/dist/integrations/state/report.js.map +1 -1
- package/dist/integrations/state/retention.d.ts +18 -0
- package/dist/integrations/state/retention.d.ts.map +1 -0
- package/dist/integrations/state/retention.js +18 -0
- package/dist/integrations/state/retention.js.map +1 -0
- package/dist/integrations/subagents/activity.d.ts +36 -31
- package/dist/integrations/subagents/activity.d.ts.map +1 -1
- package/dist/integrations/subagents/activity.js +27 -23
- package/dist/integrations/subagents/activity.js.map +1 -1
- package/dist/integrations/subagents/batches.d.ts +91 -0
- package/dist/integrations/subagents/batches.d.ts.map +1 -0
- package/dist/integrations/subagents/batches.js +172 -0
- package/dist/integrations/subagents/batches.js.map +1 -0
- package/dist/integrations/subagents/parent.d.ts +26 -11
- package/dist/integrations/subagents/parent.d.ts.map +1 -1
- package/dist/integrations/subagents/parent.js +13 -28
- package/dist/integrations/subagents/parent.js.map +1 -1
- package/dist/integrations/subagents/policy.d.ts +2 -2
- package/dist/integrations/subagents/policy.d.ts.map +1 -1
- package/dist/integrations/subagents/policy.js +2 -2
- package/dist/integrations/subagents/policy.js.map +1 -1
- package/dist/integrations/subagents/replay.d.ts +91 -26
- package/dist/integrations/subagents/replay.d.ts.map +1 -1
- package/dist/integrations/subagents/replay.js +216 -114
- package/dist/integrations/subagents/replay.js.map +1 -1
- package/dist/integrations/subagents/runtime.d.ts +50 -26
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +132 -126
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/subagents/saved-agents.d.ts +57 -0
- package/dist/integrations/subagents/saved-agents.d.ts.map +1 -0
- package/dist/integrations/subagents/saved-agents.js +102 -0
- package/dist/integrations/subagents/saved-agents.js.map +1 -0
- package/dist/integrations/subagents/slash.d.ts +55 -0
- package/dist/integrations/subagents/slash.d.ts.map +1 -0
- package/dist/integrations/subagents/slash.js +45 -0
- package/dist/integrations/subagents/slash.js.map +1 -0
- package/dist/integrations/telemetry/session-export.d.ts +6 -6
- package/dist/integrations/telemetry/session-export.d.ts.map +1 -1
- package/dist/integrations/telemetry/session-export.js +2 -2
- package/dist/memory/presentation.d.ts +11 -0
- package/dist/memory/presentation.d.ts.map +1 -1
- package/dist/memory/presentation.js +25 -0
- package/dist/memory/presentation.js.map +1 -1
- package/dist/memory/store.d.ts +13 -7
- package/dist/memory/store.d.ts.map +1 -1
- package/dist/memory/store.js +37 -11
- package/dist/memory/store.js.map +1 -1
- package/dist/memory/typed.d.ts +116 -0
- package/dist/memory/typed.d.ts.map +1 -0
- package/dist/memory/typed.js +336 -0
- package/dist/memory/typed.js.map +1 -0
- package/dist/permissions/checks.d.ts +1 -1
- package/dist/permissions/checks.js +1 -1
- package/dist/permissions/headless-trust.d.ts +2 -2
- package/dist/permissions/headless-trust.d.ts.map +1 -1
- package/dist/permissions/headless-trust.js +3 -3
- package/dist/permissions/headless-trust.js.map +1 -1
- package/dist/permissions/mode.d.ts +4 -4
- package/dist/permissions/mode.js +1 -1
- package/dist/permissions/rules.d.ts +1 -1
- package/dist/permissions/rules.js +1 -1
- package/dist/termination.d.ts +75 -0
- package/dist/termination.d.ts.map +1 -0
- package/dist/termination.js +143 -0
- package/dist/termination.js.map +1 -0
- package/dist/tui/AgentExplorer.d.ts +2 -2
- package/dist/tui/AgentExplorer.js +4 -4
- package/dist/tui/AgentExplorer.js.map +1 -1
- package/dist/tui/App.d.ts +9 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +452 -303
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/LiveActivity.d.ts +1 -1
- package/dist/tui/LiveActivity.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.d.ts +8 -0
- package/dist/tui/PermissionOverlay.d.ts.map +1 -1
- package/dist/tui/PermissionOverlay.js +25 -2
- package/dist/tui/PermissionOverlay.js.map +1 -1
- package/dist/tui/Picker.js +1 -1
- package/dist/tui/agent.d.ts +208 -132
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +523 -313
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/conversation-evidence-view.js +3 -3
- package/dist/tui/conversation-evidence-view.js.map +1 -1
- package/dist/tui/conversation-history.d.ts +4 -21
- package/dist/tui/conversation-history.d.ts.map +1 -1
- package/dist/tui/conversation-history.js +4 -28
- package/dist/tui/conversation-history.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +27 -1
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/log-pane.js +1 -1
- package/dist/tui/markdownParser.d.ts +1 -1
- package/dist/tui/markdownParser.js +1 -1
- package/dist/tui/permission-review.d.ts +16 -0
- package/dist/tui/permission-review.d.ts.map +1 -1
- package/dist/tui/permission-review.js +25 -2
- package/dist/tui/permission-review.js.map +1 -1
- package/dist/tui/slashCommands.d.ts +29 -40
- package/dist/tui/slashCommands.d.ts.map +1 -1
- package/dist/tui/slashCommands.js +70 -61
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/{run-interruption.d.ts → turn-interruption.d.ts} +4 -4
- package/dist/tui/turn-interruption.d.ts.map +1 -0
- package/dist/tui/{run-interruption.js → turn-interruption.js} +20 -20
- package/dist/tui/turn-interruption.js.map +1 -0
- package/dist/tui/turn-limits-settings.d.ts +39 -0
- package/dist/tui/turn-limits-settings.d.ts.map +1 -0
- package/dist/tui/{run-limits-settings.js → turn-limits-settings.js} +18 -18
- package/dist/tui/turn-limits-settings.js.map +1 -0
- package/dist/tui/types.d.ts +3 -3
- package/dist/tui/types.d.ts.map +1 -1
- package/dist/user-commands/store.d.ts +1 -1
- package/dist/user-commands/store.js +1 -1
- package/package.json +7 -7
- package/dist/integrations/sessions/compaction-evidence.d.ts +0 -5
- package/dist/integrations/sessions/compaction-evidence.d.ts.map +0 -1
- package/dist/integrations/sessions/compaction-evidence.js +0 -59
- package/dist/integrations/sessions/compaction-evidence.js.map +0 -1
- package/dist/integrations/sessions/database.d.ts +0 -5
- package/dist/integrations/sessions/database.d.ts.map +0 -1
- package/dist/integrations/sessions/database.js +0 -34
- package/dist/integrations/sessions/database.js.map +0 -1
- package/dist/integrations/sessions/paths.d.ts +0 -7
- package/dist/integrations/sessions/paths.d.ts.map +0 -1
- package/dist/integrations/sessions/paths.js +0 -14
- package/dist/integrations/sessions/paths.js.map +0 -1
- package/dist/integrations/sessions/run-discovery.d.ts +0 -24
- package/dist/integrations/sessions/run-discovery.d.ts.map +0 -1
- package/dist/integrations/sessions/run-discovery.js +0 -142
- package/dist/integrations/sessions/run-discovery.js.map +0 -1
- package/dist/integrations/sessions/turn-evidence.d.ts +0 -129
- package/dist/integrations/sessions/turn-evidence.d.ts.map +0 -1
- package/dist/integrations/sessions/turn-evidence.js +0 -517
- package/dist/integrations/sessions/turn-evidence.js.map +0 -1
- package/dist/integrations/subagents/history.d.ts +0 -26
- package/dist/integrations/subagents/history.d.ts.map +0 -1
- package/dist/integrations/subagents/history.js +0 -76
- package/dist/integrations/subagents/history.js.map +0 -1
- package/dist/integrations/subagents/runs.d.ts +0 -72
- package/dist/integrations/subagents/runs.d.ts.map +0 -1
- package/dist/integrations/subagents/runs.js +0 -155
- package/dist/integrations/subagents/runs.js.map +0 -1
- package/dist/tui/run-interruption.d.ts.map +0 -1
- package/dist/tui/run-interruption.js.map +0 -1
- package/dist/tui/run-limits-settings.d.ts +0 -39
- package/dist/tui/run-limits-settings.d.ts.map +0 -1
- package/dist/tui/run-limits-settings.js.map +0 -1
|
@@ -1,15 +1,54 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
1
|
import { lstatSync, readFileSync } from 'node:fs';
|
|
3
|
-
import { realpath } from 'node:fs/promises';
|
|
2
|
+
import { readFile, realpath } from 'node:fs/promises';
|
|
4
3
|
import { isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
5
|
-
import { DiskResidentAgenda, ResidentConflictError, } from '@namzu/sdk';
|
|
6
|
-
import { sessionDatabasePath, sessionStore } from '../sessions/database.js';
|
|
4
|
+
import { DiskResidentAgenda, ProjectDocumentSchema, ResidentConflictError, SessionPaths, hashedSlugForCwd, slugForCwd, } from '@namzu/sdk';
|
|
7
5
|
import { resolveNamzuHome } from '../state/home.js';
|
|
8
6
|
import { readIdentity } from '../state/identity.js';
|
|
9
7
|
import { publishPrivateJsonIfAbsent } from '../state/immutable-json.js';
|
|
10
8
|
import { ensurePrivateStateDirectory } from '../state/private-directory.js';
|
|
11
|
-
import { cliProjectRoot
|
|
9
|
+
import { cliProjectRoot } from '../state/project.js';
|
|
12
10
|
const MANDATE = 'Pursue only objectives explicitly added by this project’s operator. Respect project instructions and current tool permissions.';
|
|
11
|
+
/**
|
|
12
|
+
* Where one project's resident state lives: `<root>/projects/<slug>/residents`,
|
|
13
|
+
* with each agent's binding, runner state, attempts and learning database in
|
|
14
|
+
* `<agent-key>/` below it (the SDK's `SessionPaths.residentDir`).
|
|
15
|
+
*/
|
|
16
|
+
export function residentsRootFor(root, slug) {
|
|
17
|
+
return join(new SessionPaths({ home: root, slug }).projectDir(), 'residents');
|
|
18
|
+
}
|
|
19
|
+
/** One agent's directory under {@link residentsRootFor}. */
|
|
20
|
+
export function residentDirectoryFor(root, slug, agentKey) {
|
|
21
|
+
return new SessionPaths({ home: root, slug }).residentDir(agentKey);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The project a checkout root is filed under, found WITHOUT creating one.
|
|
25
|
+
*
|
|
26
|
+
* The same two slugs `ensureProject` tries, in the same order: the plain
|
|
27
|
+
* slug, then the hashed one when the plain slug's `project.json` names a
|
|
28
|
+
* different directory. A status request must never mint a project, so a
|
|
29
|
+
* missing document ends the search.
|
|
30
|
+
*/
|
|
31
|
+
export async function findResidentProject(root, projectRoot) {
|
|
32
|
+
for (const slug of [slugForCwd(projectRoot), hashedSlugForCwd(projectRoot)]) {
|
|
33
|
+
const file = new SessionPaths({ home: root, slug }).projectFile();
|
|
34
|
+
let raw;
|
|
35
|
+
try {
|
|
36
|
+
const entry = lstatSync(file);
|
|
37
|
+
if (!entry.isFile() || entry.isSymbolicLink())
|
|
38
|
+
throw new Error(`${file} must be a regular file, without a symbolic link.`);
|
|
39
|
+
raw = await readFile(file, 'utf8');
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
if (error.code === 'ENOENT')
|
|
43
|
+
return null;
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
const document = ProjectDocumentSchema.parse(JSON.parse(raw));
|
|
47
|
+
if (document.cwd === projectRoot)
|
|
48
|
+
return { slug, projectId: document.projectId };
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
13
52
|
function validateAgentKey(agentKey) {
|
|
14
53
|
if (!/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(agentKey)) {
|
|
15
54
|
throw new Error('Resident agent key must contain 1–64 lowercase letters, digits, underscores or hyphens, starting with a letter or digit.');
|
|
@@ -69,15 +108,16 @@ function readBinding(residentsRoot, expected, projectRoot) {
|
|
|
69
108
|
throw new Error(`${path} is not a valid resident binding: ${error instanceof Error ? error.message : String(error)}. Refusing to replace it.`);
|
|
70
109
|
}
|
|
71
110
|
}
|
|
72
|
-
function residentHandle(root,
|
|
111
|
+
function residentHandle(root, slug, binding) {
|
|
73
112
|
return {
|
|
74
|
-
agenda: new DiskResidentAgenda(
|
|
113
|
+
agenda: new DiskResidentAgenda(residentsRootFor(root, slug), binding),
|
|
75
114
|
cwd: binding.cwd,
|
|
76
115
|
agentKey: binding.agentKey,
|
|
77
|
-
artifactsRoot: join(
|
|
116
|
+
artifactsRoot: join(residentDirectoryFor(root, slug, binding.agentKey), 'attempts'),
|
|
78
117
|
projectId: binding.projectId,
|
|
79
118
|
tenantId: binding.tenantId,
|
|
80
119
|
root,
|
|
120
|
+
slug,
|
|
81
121
|
};
|
|
82
122
|
}
|
|
83
123
|
/** Resolve existing state only; a status request never mints identity or state. */
|
|
@@ -85,16 +125,15 @@ export async function lookupResident(cwd, agentKey) {
|
|
|
85
125
|
validateAgentKey(agentKey);
|
|
86
126
|
const root = resolveNamzuHome();
|
|
87
127
|
const identity = readIdentity(root);
|
|
88
|
-
if (!identity
|
|
128
|
+
if (!identity)
|
|
89
129
|
return null;
|
|
90
130
|
const workingDirectory = await realpath(resolve(cwd));
|
|
91
|
-
const
|
|
92
|
-
const project = await
|
|
131
|
+
const projectRoot = cliProjectRoot(workingDirectory);
|
|
132
|
+
const project = await findResidentProject(root, projectRoot);
|
|
93
133
|
if (!project)
|
|
94
134
|
return null;
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
return binding ? residentHandle(root, residentsRoot, binding) : null;
|
|
135
|
+
const binding = readBinding(residentsRootFor(root, project.slug), { tenantId: identity.tenantId, projectId: project.projectId, agentKey }, projectRoot);
|
|
136
|
+
return binding ? residentHandle(root, project.slug, binding) : null;
|
|
98
137
|
}
|
|
99
138
|
/** Initialize an explicit operator mutation, reusing the first creator's cwd. */
|
|
100
139
|
export async function createResident(cwd, agentKey) {
|
|
@@ -102,10 +141,14 @@ export async function createResident(cwd, agentKey) {
|
|
|
102
141
|
const workingDirectory = await realpath(resolve(cwd));
|
|
103
142
|
const { openSessions } = await import('../sessions/store.js');
|
|
104
143
|
const sessions = await openSessions(workingDirectory);
|
|
105
|
-
const
|
|
144
|
+
const projectRoot = cliProjectRoot(workingDirectory);
|
|
145
|
+
// Opening the sessions files the project; the resident state goes beside it.
|
|
146
|
+
const project = await findResidentProject(sessions.root, projectRoot);
|
|
147
|
+
if (!project || project.projectId !== sessions.projectId)
|
|
148
|
+
throw new Error(`The project for ${projectRoot} is not filed under ${join(sessions.root, 'projects')}; refusing to place resident state elsewhere.`);
|
|
149
|
+
const residentsRoot = ensurePrivateStateDirectory(new SessionPaths({ home: sessions.root, slug: project.slug }).projectDir(), 'residents');
|
|
106
150
|
const agentRoot = ensurePrivateStateDirectory(residentsRoot, agentKey);
|
|
107
151
|
const expected = { tenantId: sessions.tenantId, projectId: sessions.projectId, agentKey };
|
|
108
|
-
const projectRoot = cliProjectRoot(workingDirectory);
|
|
109
152
|
let binding = readBinding(residentsRoot, expected, projectRoot);
|
|
110
153
|
if (!binding) {
|
|
111
154
|
publishPrivateJsonIfAbsent(join(agentRoot, 'binding.json'), {
|
|
@@ -117,7 +160,7 @@ export async function createResident(cwd, agentKey) {
|
|
|
117
160
|
if (!binding)
|
|
118
161
|
throw new Error('Resident binding disappeared while it was being initialized.');
|
|
119
162
|
}
|
|
120
|
-
const resident = residentHandle(sessions.root,
|
|
163
|
+
const resident = residentHandle(sessions.root, project.slug, binding);
|
|
121
164
|
let agenda = await resident.agenda.read();
|
|
122
165
|
if (!agenda) {
|
|
123
166
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/integrations/resident/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/integrations/resident/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type ResidentHistorySource } from '@namzu/sdk';
|
|
2
2
|
import type { CliSessions } from '../sessions/store.js';
|
|
3
|
+
/** Pursuit and claim ids are UUIDs the resident agenda minted; they name no kernel entity. */
|
|
4
|
+
export declare function isResidentUuid(value: unknown): value is string;
|
|
3
5
|
export declare function readResidentAttemptReceipt(root: string, path: string, signal?: AbortSignal): Promise<unknown>;
|
|
4
|
-
/** CLI supplies attempt/
|
|
5
|
-
export declare function residentToolEvidence(history: ResidentHistorySource, sessions: CliSessions, artifactsRoot: string): import("@namzu/sdk").ResidentToolEvidenceSource;
|
|
6
|
+
/** CLI supplies attempt/session authorization; SDK owns bounded retrieval and indexing. */
|
|
7
|
+
export declare function residentToolEvidence(history: ResidentHistorySource, sessions: Pick<CliSessions, 'root' | 'projectId' | 'tenantId'>, projectSlug: string, artifactsRoot: string): import("@namzu/sdk").ResidentToolEvidenceSource;
|
|
6
8
|
//# sourceMappingURL=tool-evidence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-evidence.d.ts","sourceRoot":"","sources":["../../../src/integrations/resident/tool-evidence.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"tool-evidence.d.ts","sourceRoot":"","sources":["../../../src/integrations/resident/tool-evidence.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,KAAK,qBAAqB,EAO1B,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAOvD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAwBD,wBAAsB,0BAA0B,CAC/C,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC,EAC9D,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,mDA8DrB"}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { constants } from 'node:fs';
|
|
2
2
|
import { lstat, open } from 'node:fs/promises';
|
|
3
3
|
import { join, relative, resolve, sep } from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { SessionPaths, asSessionId, asTurnId, createResidentToolEvidenceSource, createSessionEvidenceSource, isEntityId, } from '@namzu/sdk';
|
|
5
|
+
import { SESSION_HEAD_BYTES, readSessionStart } from './session-log-reads.js';
|
|
6
6
|
const ATTEMPT_DOCUMENT_BYTES = 65_536;
|
|
7
|
+
const UUID = /^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/iu;
|
|
8
|
+
/** Pursuit and claim ids are UUIDs the resident agenda minted; they name no kernel entity. */
|
|
9
|
+
export function isResidentUuid(value) {
|
|
10
|
+
return typeof value === 'string' && UUID.test(value);
|
|
11
|
+
}
|
|
7
12
|
function identity(value) {
|
|
8
13
|
if (!value || typeof value !== 'object')
|
|
9
14
|
throw new Error('Invalid attempt receipt.');
|
|
10
15
|
const v = value;
|
|
11
16
|
if (v.version !== 1 ||
|
|
12
|
-
!
|
|
13
|
-
!
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
!isResidentUuid(v.pursuitId) ||
|
|
18
|
+
!isResidentUuid(v.claimId) ||
|
|
19
|
+
!isEntityId(v.sessionId, 'session') ||
|
|
20
|
+
!isEntityId(v.turnId, 'turn'))
|
|
16
21
|
throw new Error('Invalid attempt identity.');
|
|
17
22
|
return {
|
|
18
23
|
pursuitId: v.pursuitId,
|
|
19
24
|
claimId: v.claimId,
|
|
20
25
|
sessionId: asSessionId(v.sessionId),
|
|
21
|
-
|
|
26
|
+
turnId: asTurnId(v.turnId),
|
|
22
27
|
startedAt: v.startedAt,
|
|
23
28
|
finishedAt: v.finishedAt,
|
|
24
29
|
cleanup: v.cleanup,
|
|
@@ -60,21 +65,22 @@ export async function readResidentAttemptReceipt(root, path, signal) {
|
|
|
60
65
|
await file.close();
|
|
61
66
|
}
|
|
62
67
|
}
|
|
63
|
-
/** CLI supplies attempt/
|
|
64
|
-
export function residentToolEvidence(history, sessions, artifactsRoot) {
|
|
68
|
+
/** CLI supplies attempt/session authorization; SDK owns bounded retrieval and indexing. */
|
|
69
|
+
export function residentToolEvidence(history, sessions, projectSlug, artifactsRoot) {
|
|
65
70
|
const root = resolve(artifactsRoot);
|
|
66
|
-
const paths = new
|
|
71
|
+
const paths = new SessionPaths({ home: sessions.root, slug: projectSlug });
|
|
67
72
|
if (history.scope.tenantId !== sessions.tenantId)
|
|
68
73
|
throw new Error('Resident history tenant mismatch.');
|
|
69
74
|
return createResidentToolEvidenceSource({
|
|
70
75
|
history,
|
|
71
76
|
projectId: sessions.projectId,
|
|
72
|
-
// Start and finish documents are size-checked before reading
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
// Start and finish documents are size-checked before reading, and the
|
|
78
|
+
// log's first record is read to attribute it. Reserve their upper bound,
|
|
79
|
+
// not a fabricated measurement of stat I/O.
|
|
80
|
+
resolutionReadBytes: 2 * ATTEMPT_DOCUMENT_BYTES + SESSION_HEAD_BYTES,
|
|
81
|
+
async resolveTurn(settled, signal) {
|
|
76
82
|
const claimId = settled.claimId;
|
|
77
|
-
if (!
|
|
83
|
+
if (!isResidentUuid(claimId))
|
|
78
84
|
throw new Error('Invalid claim id.');
|
|
79
85
|
const start = identity(await readResidentAttemptReceipt(root, join(root, claimId, 'start.json'), signal));
|
|
80
86
|
const finish = identity(await readResidentAttemptReceipt(root, join(root, claimId, 'finish.json'), signal));
|
|
@@ -82,7 +88,7 @@ export function residentToolEvidence(history, sessions, artifactsRoot) {
|
|
|
82
88
|
if (record.claimId !== claimId ||
|
|
83
89
|
record.pursuitId !== history.scope.pursuitId ||
|
|
84
90
|
record.sessionId !== start.sessionId ||
|
|
85
|
-
record.
|
|
91
|
+
record.turnId !== start.turnId)
|
|
86
92
|
throw new Error('Attempt identity does not match its settled claim.');
|
|
87
93
|
if (finish.cleanup !== 'confirmed' ||
|
|
88
94
|
typeof start.startedAt !== 'number' ||
|
|
@@ -91,25 +97,25 @@ export function residentToolEvidence(history, sessions, artifactsRoot) {
|
|
|
91
97
|
!Number.isFinite(finish.finishedAt) ||
|
|
92
98
|
finish.finishedAt < start.startedAt)
|
|
93
99
|
throw new Error('Invalid attempt receipt order.');
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
// A resident step is its own root session. Its log names the project
|
|
101
|
+
// and tenant it was opened under, and both must be this resident's.
|
|
102
|
+
const logPath = paths.sessionLog({ sessionId: start.sessionId });
|
|
103
|
+
const opened = await readSessionStart(sessions.root, logPath, signal);
|
|
104
|
+
if (!opened)
|
|
105
|
+
throw new Error('Attempt session log is missing.');
|
|
106
|
+
if (opened.sessionId !== start.sessionId ||
|
|
107
|
+
opened.projectId !== sessions.projectId ||
|
|
108
|
+
(opened.tenantId !== undefined && opened.tenantId !== sessions.tenantId))
|
|
109
|
+
throw new Error('Attempt session belongs to a different project.');
|
|
101
110
|
signal?.throwIfAborted();
|
|
102
|
-
|
|
103
|
-
const indexDir = join(runDir, 'evidence-index');
|
|
104
|
-
return createDiskRunEvidenceSource({
|
|
111
|
+
return createSessionEvidenceSource({
|
|
105
112
|
scope: {
|
|
106
113
|
tenantId: sessions.tenantId,
|
|
107
114
|
projectId: sessions.projectId,
|
|
108
|
-
sessionId,
|
|
109
|
-
|
|
115
|
+
sessionId: start.sessionId,
|
|
116
|
+
turnId: start.turnId,
|
|
110
117
|
},
|
|
111
|
-
|
|
112
|
-
indexDir,
|
|
118
|
+
logPath,
|
|
113
119
|
});
|
|
114
120
|
},
|
|
115
121
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-evidence.js","sourceRoot":"","sources":["../../../src/integrations/resident/tool-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EAEN,
|
|
1
|
+
{"version":3,"file":"tool-evidence.js","sourceRoot":"","sources":["../../../src/integrations/resident/tool-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type JsonClaimRequirement, type
|
|
1
|
+
import { type JsonClaimRequirement, type TurnId } from '@namzu/sdk';
|
|
2
2
|
export interface ResidentVerificationSpec {
|
|
3
3
|
readonly version: 1;
|
|
4
4
|
readonly claims: readonly JsonClaimRequirement[];
|
|
@@ -6,6 +6,6 @@ export interface ResidentVerificationSpec {
|
|
|
6
6
|
/** Snapshot the explicitly selected manifest once; edits cannot expand a running worker's authority. */
|
|
7
7
|
export declare function loadResidentVerification(path: string, cwd: string): Promise<ResidentVerificationSpec>;
|
|
8
8
|
/** Explicit host reads, like --gate: no additional authority is granted to model tools. */
|
|
9
|
-
export declare function residentClaimVerifier(spec: ResidentVerificationSpec, cwd: string, scope: string,
|
|
9
|
+
export declare function residentClaimVerifier(spec: ResidentVerificationSpec, cwd: string, scope: string, turnId: TurnId): import("@namzu/sdk").JsonClaimVerifier;
|
|
10
10
|
export declare function verificationInstructions(spec: ResidentVerificationSpec): string;
|
|
11
11
|
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/integrations/resident/verification.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/integrations/resident/verification.ts"],"names":[],"mappings":"AAGA,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,MAAM,EAGX,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAA;CAChD;AAsFD,wGAAwG;AACxG,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,wBAAwB,CAAC,CAQnC;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,wBAAwB,EAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,0CAoBd;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAO/E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { constants } from 'node:fs';
|
|
2
2
|
import { open, realpath, stat } from 'node:fs/promises';
|
|
3
3
|
import { isAbsolute, relative, resolve } from 'node:path';
|
|
4
|
-
import { createJsonClaimVerifier,
|
|
4
|
+
import { createJsonClaimVerifier, generateTurnId, } from '@namzu/sdk';
|
|
5
5
|
/** Bounded regular-file observation; checks changes during the read, never runs commands. */
|
|
6
6
|
async function readDocument(path, maxBytes, signal) {
|
|
7
7
|
signal?.throwIfAborted();
|
|
@@ -63,7 +63,7 @@ function validateSpec(value) {
|
|
|
63
63
|
// Validate the shared pointer/value/size contract before admitting a model.
|
|
64
64
|
createJsonClaimVerifier({
|
|
65
65
|
scope: 'configuration',
|
|
66
|
-
|
|
66
|
+
turnId: generateTurnId(),
|
|
67
67
|
requirements: spec.claims,
|
|
68
68
|
observe: async () => {
|
|
69
69
|
throw new Error('Configuration validation never observes sources.');
|
|
@@ -76,11 +76,11 @@ export async function loadResidentVerification(path, cwd) {
|
|
|
76
76
|
return validateSpec(JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(await readDocument(resolve(cwd, path), 65_536))));
|
|
77
77
|
}
|
|
78
78
|
/** Explicit host reads, like --gate: no additional authority is granted to model tools. */
|
|
79
|
-
export function residentClaimVerifier(spec, cwd, scope,
|
|
79
|
+
export function residentClaimVerifier(spec, cwd, scope, turnId) {
|
|
80
80
|
const snapshot = validateSpec(spec);
|
|
81
81
|
const verifier = createJsonClaimVerifier({
|
|
82
82
|
scope,
|
|
83
|
-
|
|
83
|
+
turnId,
|
|
84
84
|
requirements: snapshot.claims,
|
|
85
85
|
observe: async (source, request) => {
|
|
86
86
|
request.signal.throwIfAborted();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../src/integrations/resident/verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../src/integrations/resident/verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CheckpointLogView, SessionLog } from '@namzu/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* What a checkpoint store asks of the session log it protects, answered by
|
|
4
|
+
* reading that log strictly.
|
|
5
|
+
*
|
|
6
|
+
* The disk checkpoint store verifies a checkpoint against the log before a
|
|
7
|
+
* restore (the record at `throughSeq` still hashes the same, and the document
|
|
8
|
+
* hashes to its `checkpoint_written.docSha256`) and never prunes one an open
|
|
9
|
+
* decision names. A resume in this process builds the store over the same log
|
|
10
|
+
* the turn appends to.
|
|
11
|
+
*/
|
|
12
|
+
export declare function sessionLogCheckpointView(log: Pick<SessionLog, 'read' | 'sessionId'>): CheckpointLogView;
|
|
13
|
+
//# sourceMappingURL=checkpoint-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-view.d.ts","sourceRoot":"","sources":["../../../src/integrations/sessions/checkpoint-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,iBAAiB,EAAmB,UAAU,EAAE,MAAM,YAAY,CAAA;AAE9F;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAAC,GACzC,iBAAiB,CA+BnB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a checkpoint store asks of the session log it protects, answered by
|
|
3
|
+
* reading that log strictly.
|
|
4
|
+
*
|
|
5
|
+
* The disk checkpoint store verifies a checkpoint against the log before a
|
|
6
|
+
* restore (the record at `throughSeq` still hashes the same, and the document
|
|
7
|
+
* hashes to its `checkpoint_written.docSha256`) and never prunes one an open
|
|
8
|
+
* decision names. A resume in this process builds the store over the same log
|
|
9
|
+
* the turn appends to.
|
|
10
|
+
*/
|
|
11
|
+
export function sessionLogCheckpointView(log) {
|
|
12
|
+
const owns = (scope) => scope.sessionId === log.sessionId;
|
|
13
|
+
return {
|
|
14
|
+
async verifyThrough(scope, throughSeq, throughSha256) {
|
|
15
|
+
if (!owns(scope))
|
|
16
|
+
return false;
|
|
17
|
+
for await (const { pointer } of log.read({ mode: 'strict', throughSeq })) {
|
|
18
|
+
if (pointer.seq === throughSeq)
|
|
19
|
+
return pointer.sha256 === throughSha256;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
},
|
|
23
|
+
async writtenDocSha256(scope, checkpointId) {
|
|
24
|
+
if (!owns(scope))
|
|
25
|
+
return null;
|
|
26
|
+
let found = null;
|
|
27
|
+
for await (const { record } of log.read({ mode: 'strict' })) {
|
|
28
|
+
if (record.type === 'checkpoint_written' && record.checkpointId === checkpointId) {
|
|
29
|
+
found = record.docSha256;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return found;
|
|
33
|
+
},
|
|
34
|
+
async openDecisionCheckpoints(scope) {
|
|
35
|
+
const open = new Map();
|
|
36
|
+
if (!owns(scope))
|
|
37
|
+
return [];
|
|
38
|
+
for await (const { record } of log.read({ mode: 'strict' })) {
|
|
39
|
+
if (record.type === 'decision_requested')
|
|
40
|
+
open.set(record.decisionId, record.checkpointId);
|
|
41
|
+
else if (record.type === 'decision_resolved' || record.type === 'decision_expired')
|
|
42
|
+
open.delete(record.decisionId);
|
|
43
|
+
}
|
|
44
|
+
return [...open.values()];
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=checkpoint-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-view.js","sourceRoot":"","sources":["../../../src/integrations/sessions/checkpoint-view.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACvC,GAA2C;IAE3C,MAAM,IAAI,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,CAAA;IAC1E,OAAO;QACN,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa;YACnD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC9B,IAAI,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;gBAC1E,IAAI,OAAO,CAAC,GAAG,KAAK,UAAU;oBAAE,OAAO,OAAO,CAAC,MAAM,KAAK,aAAa,CAAA;YACxE,CAAC;YACD,OAAO,KAAK,CAAA;QACb,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY;YACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC7B,IAAI,KAAK,GAAkB,IAAI,CAAA;YAC/B,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,IAAI,MAAM,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;oBAClF,KAAK,GAAG,MAAM,CAAC,SAAS,CAAA;gBACzB,CAAC;YACF,CAAC;YACD,OAAO,KAAK,CAAA;QACb,CAAC;QACD,KAAK,CAAC,uBAAuB,CAAC,KAAK;YAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAwB,CAAA;YAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAA;YAC3B,IAAI,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;gBAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB;oBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;qBACrF,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB;oBACjF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAChC,CAAC;YACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1B,CAAC;KACD,CAAA;AACF,CAAC"}
|
|
@@ -36,7 +36,7 @@ export function createContextInventoryStep() {
|
|
|
36
36
|
estimatedRemainingTokens: contextBudget?.remainingTokens,
|
|
37
37
|
largestToolBlocks: blocks.sort((a, b) => b.chars - a.chars).slice(0, 6),
|
|
38
38
|
};
|
|
39
|
-
const text = 'Context inventory (current request only). Positions are temporary, not archive IDs. Sizes are UTF-16 text characters; non-text payloads are counted, not estimated as base64 text tokens. For earlier evidence use search_conversation, then read_conversation(
|
|
39
|
+
const text = 'Context inventory (current request only). Positions are temporary, not archive IDs. Sizes are UTF-16 text characters; non-text payloads are counted, not estimated as base64 text tokens. For earlier evidence use search_conversation, then read_conversation(seq, part) for exact retained pages. Do not repeat a state-changing action to recover its output.\n' +
|
|
40
40
|
JSON.stringify(inventory);
|
|
41
41
|
return { context: [prepared.context, text].filter(Boolean).join('\n\n') };
|
|
42
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-inventory.js","sourceRoot":"","sources":["../../../src/integrations/sessions/context-inventory.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B;IACzC,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACxD,MAAM,EAAE,cAAc,EAAE,CAAA;QACxB,MAAM,MAAM,GAA2E,EAAE,CAAA;QACzF,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAQ;YACrC,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;gBAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;iBAClE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBACtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wBAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;;wBAChD,MAAM,EAAE,CAAA;gBACd,CAAC;YACF,UAAU,IAAI,KAAK,CAAA;YACnB,UAAU,IAAI,MAAM,CAAA;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,IAAI,aAAa,CAAC,eAAe,GAAG,aAAa,CAAC,YAAY,GAAG,CAAC,CAAA;QAChG,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QACtD,gFAAgF;QAChF,IAAI,aAAa,IAAI,aAAa,CAAC,eAAe,GAAG,KAAK;YAAE,OAAO,SAAS,CAAA;QAC5E,MAAM,SAAS,GAAG;YACjB,eAAe,EAAE,QAAQ,CAAC,MAAM;YAChC,oBAAoB,EAAE,UAAU;YAChC,oBAAoB,EAAE,UAAU;YAChC,wBAAwB,EAAE,aAAa,EAAE,eAAe;YACxD,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACvE,CAAA;QACD,MAAM,IAAI,GACT,
|
|
1
|
+
{"version":3,"file":"context-inventory.js","sourceRoot":"","sources":["../../../src/integrations/sessions/context-inventory.ts"],"names":[],"mappings":"AAEA,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B;IACzC,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QACxD,MAAM,EAAE,cAAc,EAAE,CAAA;QACxB,MAAM,MAAM,GAA2E,EAAE,CAAA;QACzF,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAQ;YACrC,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;gBAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAA;iBAClE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;gBACtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wBAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAA;;wBAChD,MAAM,EAAE,CAAA;gBACd,CAAC;YACF,UAAU,IAAI,KAAK,CAAA;YACnB,UAAU,IAAI,MAAM,CAAA;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,IAAI,aAAa,CAAC,eAAe,GAAG,aAAa,CAAC,YAAY,GAAG,CAAC,CAAA;QAChG,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QACtD,gFAAgF;QAChF,IAAI,aAAa,IAAI,aAAa,CAAC,eAAe,GAAG,KAAK;YAAE,OAAO,SAAS,CAAA;QAC5E,MAAM,SAAS,GAAG;YACjB,eAAe,EAAE,QAAQ,CAAC,MAAM;YAChC,oBAAoB,EAAE,UAAU;YAChC,oBAAoB,EAAE,UAAU;YAChC,wBAAwB,EAAE,aAAa,EAAE,eAAe;YACxD,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACvE,CAAA;QACD,MAAM,IAAI,GACT,oWAAoW;YACpW,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;IAC1E,CAAC,CAAA;AACF,CAAC"}
|