@intentic/sandbox-contract 1.230.3 → 1.232.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/README.md +11 -0
- package/dist/contracts/agent.contract.d.ts +53 -6
- package/dist/contracts/agent.contract.d.ts.map +1 -1
- package/dist/contracts/agent.contract.js +10 -1
- package/dist/contracts/agent.contract.js.map +1 -1
- package/dist/contracts/agents.contract.d.ts +6 -1
- package/dist/contracts/agents.contract.d.ts.map +1 -1
- package/dist/contracts/capabilities.contract.d.ts +293 -0
- package/dist/contracts/capabilities.contract.d.ts.map +1 -1
- package/dist/contracts/capabilities.contract.js +10 -1
- package/dist/contracts/capabilities.contract.js.map +1 -1
- package/dist/contracts/extensions.contract.d.ts +15 -0
- package/dist/contracts/extensions.contract.d.ts.map +1 -1
- package/dist/contracts/git.contract.d.ts +12 -2
- package/dist/contracts/git.contract.d.ts.map +1 -1
- package/dist/contracts/history.contract.d.ts +6 -1
- package/dist/contracts/history.contract.d.ts.map +1 -1
- package/dist/contracts/host.contract.d.ts +4 -0
- package/dist/contracts/host.contract.d.ts.map +1 -1
- package/dist/contracts/panels.contract.d.ts +1 -0
- package/dist/contracts/panels.contract.d.ts.map +1 -1
- package/dist/contracts/runner.contract.d.ts +876 -0
- package/dist/contracts/runner.contract.d.ts.map +1 -0
- package/dist/contracts/runner.contract.js +17 -0
- package/dist/contracts/runner.contract.js.map +1 -0
- package/dist/contracts/system.contract.d.ts +6 -3
- package/dist/contracts/system.contract.d.ts.map +1 -1
- package/dist/definition.d.ts +961 -0
- package/dist/definition.d.ts.map +1 -0
- package/dist/definition.js +71 -0
- package/dist/definition.js.map +1 -0
- package/dist/documents.d.ts +7 -0
- package/dist/documents.d.ts.map +1 -0
- package/dist/documents.js +27 -0
- package/dist/documents.js.map +1 -0
- package/dist/events.d.ts +66 -6
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +17 -1
- package/dist/events.js.map +1 -1
- package/dist/history-state.d.ts.map +1 -1
- package/dist/history-state.js +3 -0
- package/dist/history-state.js.map +1 -1
- package/dist/index.d.ts +396 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/runner-protocol.d.ts +134 -0
- package/dist/runner-protocol.d.ts.map +1 -0
- package/dist/runner-protocol.js +95 -0
- package/dist/runner-protocol.js.map +1 -0
- package/dist/schemas.d.ts +194 -32
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +80 -25
- package/dist/schemas.js.map +1 -1
- package/dist/workspace-state.d.ts +9 -0
- package/dist/workspace-state.d.ts.map +1 -1
- package/dist/workspace-state.js +2 -0
- package/dist/workspace-state.js.map +1 -1
- package/package.json +6 -6
- package/src/contracts/agent.contract.ts +19 -0
- package/src/contracts/capabilities.contract.ts +16 -0
- package/src/contracts/runner.contract.ts +49 -0
- package/src/definition.ts +171 -0
- package/src/documents.test.ts +66 -0
- package/src/documents.ts +71 -0
- package/src/events.ts +88 -2
- package/src/history-state.ts +7 -0
- package/src/index.ts +5 -0
- package/src/runner-protocol.ts +209 -0
- package/src/schemas.ts +225 -65
- package/src/workspace-state.test.ts +4 -0
- package/src/workspace-state.ts +19 -0
|
@@ -57,11 +57,20 @@ declare const STATE_FILES: readonly [{
|
|
|
57
57
|
readonly invalidates: readonly ["settings", "manifests"];
|
|
58
58
|
readonly portability: "carry";
|
|
59
59
|
readonly versioned: true;
|
|
60
|
+
}, {
|
|
61
|
+
readonly path: ".intentic/config/heavy-commands.json";
|
|
62
|
+
readonly invalidates: readonly ["settings"];
|
|
63
|
+
readonly portability: "carry";
|
|
64
|
+
readonly versioned: true;
|
|
60
65
|
}, {
|
|
61
66
|
readonly path: ".intentic/local/rule-firings.json";
|
|
62
67
|
readonly invalidates: readonly ["rule-firings"];
|
|
63
68
|
readonly portability: "derived";
|
|
64
69
|
readonly note: "Stamps of when each rule last did something; the new sandbox starts its own record.";
|
|
70
|
+
}, {
|
|
71
|
+
readonly path: ".intentic/records/runtime-installs.json";
|
|
72
|
+
readonly invalidates: readonly ["environment"];
|
|
73
|
+
readonly portability: "carry";
|
|
65
74
|
}, {
|
|
66
75
|
readonly path: ".intentic/config/drafts/";
|
|
67
76
|
readonly invalidates: readonly ["drafts"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-state.d.ts","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA0CxD,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IAKjD,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAExC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAgCtB,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAY1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IAoBzB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IAKxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACnC;AAOD,QAAA,MAAM,WAAW;mBA4BH,oCAAoC;;0BAE7B,OAAO;;;mBAShB,6CAA6C;;0BAA8C,OAAO;;;mBAOlG,oCAAoC;;0BAAyC,OAAO;;mBAQlF,sCAAsC;;kBAEvC,4GAA4G;0BACpG,OAAO;;mBAehB,gCAAgC;;0BAAuE,OAAO;;;mBAY9G,gDAAgD;;0BAA6C,OAAO;;;mBACpG,yCAAyC;;0BAA6C,OAAO;;;mBAC7F,iCAAiC;;0BAA6C,OAAO;;;mBAEnF,iDAAiD;;0BAE1C,SAAS;mBAChB,oGAAoG;;mBAGtG,gCAAgC;;0BAAuD,OAAO;;;
|
|
1
|
+
{"version":3,"file":"workspace-state.d.ts","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace-state.js
CHANGED
|
@@ -25,12 +25,14 @@ const STATE_FILES = [
|
|
|
25
25
|
note: "The target composes its own overlay on first boot; rebuild it there to install the tools it names.",
|
|
26
26
|
},
|
|
27
27
|
{ path: ".intentic/config/settings.json", invalidates: ["settings", "manifests"], portability: "carry", versioned: true },
|
|
28
|
+
{ path: ".intentic/config/heavy-commands.json", invalidates: ["settings"], portability: "carry", versioned: true },
|
|
28
29
|
{
|
|
29
30
|
path: ".intentic/local/rule-firings.json",
|
|
30
31
|
invalidates: ["rule-firings"],
|
|
31
32
|
portability: "derived",
|
|
32
33
|
note: "Stamps of when each rule last did something; the new sandbox starts its own record.",
|
|
33
34
|
},
|
|
35
|
+
{ path: ".intentic/records/runtime-installs.json", invalidates: ["environment"], portability: "carry" },
|
|
34
36
|
{ path: ".intentic/config/drafts/", invalidates: ["drafts"], portability: "carry", versioned: true, authored: true },
|
|
35
37
|
{
|
|
36
38
|
path: ".intentic/config/automations.json",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-state.js","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace-state.js","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/sandbox-contract",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.232.0",
|
|
4
4
|
"description": "oRPC wire contract for the intentic sandbox daemon, shared by the daemon and its browser client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -89,16 +89,16 @@
|
|
|
89
89
|
"@orpc/contract": "1.14.13",
|
|
90
90
|
"tslib": "2.8.1",
|
|
91
91
|
"zod": "4.4.3",
|
|
92
|
-
"@intentic/
|
|
93
|
-
"@intentic/
|
|
94
|
-
"@intentic/
|
|
92
|
+
"@intentic/registry": "1.232.0",
|
|
93
|
+
"@intentic/constants": "1.232.0",
|
|
94
|
+
"@intentic/extension-manifest": "1.232.0"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|
|
97
97
|
"@types/node": "24.13.2",
|
|
98
98
|
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
99
99
|
"vitest": "4.1.10",
|
|
100
|
-
"@intentic/
|
|
101
|
-
"@intentic/
|
|
100
|
+
"@intentic/testing": "0.0.0",
|
|
101
|
+
"@intentic/tsconfig": "0.0.0"
|
|
102
102
|
},
|
|
103
103
|
"scripts": {
|
|
104
104
|
"build": "tsgo",
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AttachTurnSchema,
|
|
7
7
|
OkSchema,
|
|
8
8
|
ProviderRefusalsSchema,
|
|
9
|
+
ResumeTurnSchema,
|
|
9
10
|
RewindResultSchema,
|
|
10
11
|
RewindTurnSchema,
|
|
11
12
|
StartedTurnSchema,
|
|
@@ -68,6 +69,24 @@ export const agentContract = {
|
|
|
68
69
|
})
|
|
69
70
|
.input(StopTurnSchema)
|
|
70
71
|
.output(OkSchema),
|
|
72
|
+
/* Run the conversation's HELD turn again: the one a spent allowance refused, which the daemon kept whole.
|
|
73
|
+
* NOT_FOUND when it holds none (nothing was stranded, another turn has since superseded it, or the daemon
|
|
74
|
+
* restarted), which is what tells a client to fall back to saying something itself.
|
|
75
|
+
*
|
|
76
|
+
* Separate from `run` because it is a different act. `run` says something new; this repeats something already
|
|
77
|
+
* said, and the difference has to survive onto the wire or it cannot survive into the transcript: a repeat
|
|
78
|
+
* sent as a new turn is a new user message, and four presses against one spent allowance then read back, to
|
|
79
|
+
* the model as much as to the reader, as four things the user said and nobody answered. */
|
|
80
|
+
resume: oc
|
|
81
|
+
.route({
|
|
82
|
+
method: "POST",
|
|
83
|
+
path: "/agent/resume",
|
|
84
|
+
summary: "Run a refused turn again",
|
|
85
|
+
description:
|
|
86
|
+
"Sends the same turn again when the model provider's allowance refused it, with everything it originally carried. It repeats the request rather than adding a new message to the conversation, so pressing it twice costs nothing and the agent is never told to continue work it has not started.",
|
|
87
|
+
})
|
|
88
|
+
.input(ResumeTurnSchema)
|
|
89
|
+
.output(StartedTurnSchema),
|
|
71
90
|
// Go back to a message: restore the workspace to that turn's checkpoint, drop the messages after it, and
|
|
72
91
|
// forget the provider session. CONFLICT while a turn is running, a restore cannot overwrite files an
|
|
73
92
|
// agent is editing. NOT_FOUND when that message has no checkpoint to go back to.
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
CapabilityIdParamSchema,
|
|
8
8
|
CapabilityLoginSchema,
|
|
9
9
|
CapabilityOtpSchema,
|
|
10
|
+
CapabilityProbeSchema,
|
|
10
11
|
CapabilityRenameSchema,
|
|
11
12
|
CapabilitySchema,
|
|
12
13
|
CapabilitySecretInputSchema,
|
|
@@ -48,6 +49,21 @@ export const capabilitiesContract = {
|
|
|
48
49
|
})
|
|
49
50
|
.input(CapabilitySchema)
|
|
50
51
|
.output(eventIterator(IntenticLineSchema)),
|
|
52
|
+
/* TRY THE SETTINGS BEFORE SAVING THEM. Nothing is written and nothing is applied: the daemon dials the
|
|
53
|
+
* service the way the connection would and hands back what it said. It exists because the alternative is
|
|
54
|
+
* the form's only feedback being the card afterwards reading "not connected", which names none of the six
|
|
55
|
+
* answers that could have been wrong. A credential the caller is keeping arrives as VAULTED here too, so
|
|
56
|
+
* an edit can be tested without re-typing a key. */
|
|
57
|
+
probe: oc
|
|
58
|
+
.route({
|
|
59
|
+
method: "POST",
|
|
60
|
+
path: "/capabilities/probe",
|
|
61
|
+
summary: "Test a connection's settings without saving them",
|
|
62
|
+
description:
|
|
63
|
+
"Dials the service the way this connection would and hands back what it said, before anything is written. The answer is the service's own confirmation or its exact refusal, so a wrong token or an unreachable host is found on the form rather than on a card afterwards.",
|
|
64
|
+
})
|
|
65
|
+
.input(CapabilitySchema)
|
|
66
|
+
.output(CapabilityProbeSchema),
|
|
51
67
|
remove: oc
|
|
52
68
|
.route({
|
|
53
69
|
method: "DELETE",
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { eventIterator, oc } from "@orpc/contract";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { AgentEventSchema } from "../events.js";
|
|
4
|
+
import { RunnerFactsSchema, RunnerSyncLineSchema, RunnerSyncSchema, RunnerTurnSchema } from "../runner-protocol.js";
|
|
5
|
+
import { AgentReplySchema, EditorContextSchema, OkSchema } from "../schemas.js";
|
|
6
|
+
|
|
7
|
+
/* What a RUNNER can be asked, over the socket it opened to its parent sandbox. Phase-1 skeleton: the shape is
|
|
8
|
+
* decided (docs/remote-runners-plan.md §5, workspace root), the implementations land with runner mode.
|
|
9
|
+
*
|
|
10
|
+
* Same inversion as hostContract: the runner dialled, but the runner is the oRPC SERVER and the parent holds
|
|
11
|
+
* the client, because a runner sits behind NAT or inside a Fly private network and can only ever be the side
|
|
12
|
+
* that connects. No `.route()` on these, the link never touches HTTP; the procedure path IS the address.
|
|
13
|
+
*
|
|
14
|
+
* TYPED THROUGHOUT, where hostContract keeps its deliberate `mcp` hole, and the difference is who releases
|
|
15
|
+
* what. A machine's tools must outlive the daemon's release cycle, so their schemas stay on the machine. A
|
|
16
|
+
* runner IS this daemon, the same image the parent runs, released together by construction, so an untyped
|
|
17
|
+
* channel would buy independence nobody has while costing the parent's persistence layer its guarantee that
|
|
18
|
+
* every frame is exactly what a local turn would have produced. */
|
|
19
|
+
export const runnerContract = {
|
|
20
|
+
// What this runner is, hardware-wise: pulled after the socket authenticates and again whenever the
|
|
21
|
+
// placement picker wants it fresh. Parity facts (image, overlay hash) ride the hello instead, they change
|
|
22
|
+
// only with a rebuild, which drops the socket anyway.
|
|
23
|
+
describe: oc.output(RunnerFactsSchema),
|
|
24
|
+
// Bring the runner's checkout of one conversation's branch up to date (`pull`), or return the result
|
|
25
|
+
// after a turn (`push`). Streamed: a first sync clones repositories, and a person may be watching.
|
|
26
|
+
syncWorkspace: oc.input(RunnerSyncSchema).output(eventIterator(RunnerSyncLineSchema)),
|
|
27
|
+
// The dispatch: one turn in, the frames a local turn would have produced out. The parent republishes them
|
|
28
|
+
// into the same pipeline local frames enter, which is the whole "feels local" mechanism.
|
|
29
|
+
runTurn: oc.input(RunnerTurnSchema).output(eventIterator(AgentEventSchema)),
|
|
30
|
+
/* THE USER, REACHING THE TURN THEY ARE WATCHING. A remote turn's question, permission prompt and plan
|
|
31
|
+
* approval are minted in the RUNNER's request registry, and the answer arrives at the PARENT (that is
|
|
32
|
+
* where the browser is). So it travels back down the same socket and is applied there by the same code a
|
|
33
|
+
* local answer takes (agent/turn-interactions.ts).
|
|
34
|
+
*
|
|
35
|
+
* `applied` rather than a throw: "nothing holds that id any more" is an ordinary race (the card was
|
|
36
|
+
* answered in another window, or the turn ended while the user was reading), and the parent turns it
|
|
37
|
+
* into the same NOT_FOUND its local path gives. */
|
|
38
|
+
reply: oc.input(AgentReplySchema).output(z.object({ applied: z.boolean() })),
|
|
39
|
+
/* Speaking into a running remote turn. The parent sends the user's words, the attachment paths and the
|
|
40
|
+
* editor context UNCOMPOSED: the note over those paths has to be built against the runner's own
|
|
41
|
+
* workspace root, since that is the machine whose files the agent will open. */
|
|
42
|
+
steer: oc
|
|
43
|
+
.input(z.object({ conversationId: z.string().min(1), text: z.string(), attachments: z.array(z.string()).optional(), editorContext: EditorContextSchema.optional() }))
|
|
44
|
+
.output(z.object({ applied: z.boolean(), invalid: z.string().optional() })),
|
|
45
|
+
// Stop the running turn; the parent's stop button reaching through.
|
|
46
|
+
interrupt: oc.input(RunnerTurnSchema.pick({ conversationId: true })).output(OkSchema),
|
|
47
|
+
// Liveness, driven by the parent: keepalive and gone-detection in one, the host hub's heartbeat verbatim.
|
|
48
|
+
ping: oc.output(OkSchema),
|
|
49
|
+
};
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { CapabilitySchema, SandboxSettingsSchema } from "./schemas.js";
|
|
3
|
+
|
|
4
|
+
/* THE SANDBOX DEFINITION: the declarable SHAPE of a sandbox, split off from its state.
|
|
5
|
+
*
|
|
6
|
+
* A bundle (portability section of schemas.ts) moves everything a sandbox holds; this is the half of it that
|
|
7
|
+
* is a REFERENCE to a source of truth rather than bytes only this sandbox has: which repos (as remotes a
|
|
8
|
+
* target can clone), which connections (as shapes a target re-authenticates), which overlay steps (as source
|
|
9
|
+
* a target's owner approves), which secrets (as NAMES a target asks for), which agent settings. Everything
|
|
10
|
+
* here can be reproduced against the world; everything a bundle carries beyond it (transcripts, checkpoint
|
|
11
|
+
* timelines, unpushed branches, ledgers) cannot, which is the line between the two formats.
|
|
12
|
+
*
|
|
13
|
+
* ON THE WIRE AND ON DISK IT IS TOML (`sandbox.toml`), hand-writable and diffable; these schemas are what the
|
|
14
|
+
* parsed document must satisfy. The choice of a definition never relaxes the consent model: applying one
|
|
15
|
+
* writes the overlay as a PROPOSAL for the owner's approval gate, lands capabilities unauthenticated, and
|
|
16
|
+
* never carries a credential value, so a definition is safe to publish in a way a bundle never is.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// One repository, by reference: the id it lands under in the workspace, where a target clones it from, and
|
|
20
|
+
// (optionally) the branch to check out. A repo with NO remote cannot appear here, the exporter reports it as
|
|
21
|
+
// omitted instead of inventing a source for bytes only the source sandbox holds.
|
|
22
|
+
export const DefinitionRepositorySchema = z.object({
|
|
23
|
+
// Workspace-relative repo id ("intentic", "clients/foo"), the same id the wire {repo} routes use.
|
|
24
|
+
id: z.string().min(1),
|
|
25
|
+
// The clone URL, verbatim from the source repo's own remote.
|
|
26
|
+
remote: z.string().min(1),
|
|
27
|
+
// The branch to check out; absent means the remote's default.
|
|
28
|
+
ref: z.string().optional(),
|
|
29
|
+
});
|
|
30
|
+
export type DefinitionRepository = z.infer<typeof DefinitionRepositorySchema>;
|
|
31
|
+
|
|
32
|
+
export const DefinitionEnvironmentSchema = z.object({
|
|
33
|
+
// The image the overlay extends, informational: the target composes against ITS OWN base (see
|
|
34
|
+
// composeEnvironment's baseImageOf), this records what the source was on.
|
|
35
|
+
baseImage: z.string().optional(),
|
|
36
|
+
/* The owner-approved CUSTOM overlay section, as source. Deliberately not the composed file and
|
|
37
|
+
* deliberately without the approval hash: consent does not travel, so an applied definition parks this at
|
|
38
|
+
* the target owner's approval gate rather than executing it. */
|
|
39
|
+
dockerfile: z.string().optional(),
|
|
40
|
+
});
|
|
41
|
+
export type DefinitionEnvironment = z.infer<typeof DefinitionEnvironmentSchema>;
|
|
42
|
+
|
|
43
|
+
/* The settings section: every SandboxSettings field, optional, WITHOUT its default. `.partial()` alone keeps
|
|
44
|
+
* each field's `.default()`, so a document naming two flags would parse into the whole surface at today's
|
|
45
|
+
* defaults — the opposite of "state only decisions", and it would freeze those defaults into every future
|
|
46
|
+
* apply. Unwrapping first is what makes an absent key STAY absent, so applying merges over the target's own
|
|
47
|
+
* settings and a definition round-trips through parse byte-identically. */
|
|
48
|
+
// Both wrapper classes, in a loop: a field can be a default inside a prefault, and either one left on would
|
|
49
|
+
// re-materialize its value for an absent key.
|
|
50
|
+
const bareField = (field: z.ZodType): z.ZodType => {
|
|
51
|
+
let inner = field;
|
|
52
|
+
while (inner instanceof z.ZodDefault || inner instanceof z.ZodPrefault) {
|
|
53
|
+
inner = inner.unwrap() as z.ZodType;
|
|
54
|
+
}
|
|
55
|
+
return inner;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const definitionSettings = (): z.ZodType<Partial<z.infer<typeof SandboxSettingsSchema>>> => {
|
|
59
|
+
const shape = Object.fromEntries(Object.entries(SandboxSettingsSchema.shape).map(([key, field]) => [key, bareField(field).optional()]));
|
|
60
|
+
return z.object(shape).prefault({}) as unknown as z.ZodType<Partial<z.infer<typeof SandboxSettingsSchema>>>;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const SandboxDefinitionSchema = z.object({
|
|
64
|
+
// Bumped when the layout changes in a way an older daemon would misread. Refused rather than guessed at,
|
|
65
|
+
// the bundle manifest's own rule.
|
|
66
|
+
schemaVersion: z.literal(1),
|
|
67
|
+
// What the source sandbox was called, for the reader; never used to authorize anything.
|
|
68
|
+
name: z.string().optional(),
|
|
69
|
+
environment: DefinitionEnvironmentSchema.prefault({}),
|
|
70
|
+
repositories: z.array(DefinitionRepositorySchema).prefault([]),
|
|
71
|
+
/* Each connection IN FULL (id, kind, config), not merely named: the manifest they come from carries the
|
|
72
|
+
* SHAPE of a connection and never its credential (workspace-state.ts argues the split on the
|
|
73
|
+
* capabilities.json entry, and the exporter sweeps before reading), so what lands on a target is the card,
|
|
74
|
+
* visibly unauthenticated, waiting for one credential apiece. */
|
|
75
|
+
capabilities: z.array(CapabilitySchema).prefault([]),
|
|
76
|
+
// Secret NAMES only, what the target should ask its owner for. Values never enter a definition.
|
|
77
|
+
secrets: z.array(z.string()).prefault([]),
|
|
78
|
+
// The agent settings that differ from their defaults. Partial on purpose: a definition states decisions,
|
|
79
|
+
// not the whole flag surface, so a flag it does not mention keeps the target's own default.
|
|
80
|
+
settings: definitionSettings(),
|
|
81
|
+
});
|
|
82
|
+
export type SandboxDefinition = z.infer<typeof SandboxDefinitionSchema>;
|
|
83
|
+
|
|
84
|
+
// One "do this by hand" line, the same honesty unit ImportReportSchema carries: a subject the UI bolds and a
|
|
85
|
+
// detail written as an instruction to the owner.
|
|
86
|
+
export const DefinitionActionSchema = z.object({ subject: z.string(), detail: z.string() });
|
|
87
|
+
export type DefinitionAction = z.infer<typeof DefinitionActionSchema>;
|
|
88
|
+
|
|
89
|
+
// What GET /definition answers: the emitted TOML, plus what the derivation could not express (a repo with no
|
|
90
|
+
// remote), listed rather than silent, the export's own `excluded` discipline.
|
|
91
|
+
export const DefinitionExportSchema = z.object({
|
|
92
|
+
toml: z.string(),
|
|
93
|
+
omitted: z.array(DefinitionActionSchema),
|
|
94
|
+
});
|
|
95
|
+
export type DefinitionExport = z.infer<typeof DefinitionExportSchema>;
|
|
96
|
+
|
|
97
|
+
// One appliable piece of a held definition, the checklist row the owner ticks. Mirrors MigrationItemSchema's
|
|
98
|
+
// role; the ids are deterministic ("repo:intentic", "capability:github") so the re-derived apply names the
|
|
99
|
+
// same items the owner reviewed.
|
|
100
|
+
export const DefinitionItemSchema = z.object({
|
|
101
|
+
id: z.string(),
|
|
102
|
+
kind: z.enum(["repo", "capability", "environment", "settings"]),
|
|
103
|
+
label: z.string(),
|
|
104
|
+
detail: z.string().optional(),
|
|
105
|
+
/* False when the target already holds this piece (the repo's directory exists, a capability with that id
|
|
106
|
+
* exists): a definition lands BESIDE what is there, never over it, so an inapplicable item renders greyed
|
|
107
|
+
* with its reason rather than disappearing. */
|
|
108
|
+
applicable: z.boolean(),
|
|
109
|
+
reason: z.string().optional(),
|
|
110
|
+
});
|
|
111
|
+
export type DefinitionItem = z.infer<typeof DefinitionItemSchema>;
|
|
112
|
+
|
|
113
|
+
export const DefinitionPlanSchema = z.object({
|
|
114
|
+
// Names the held definition for the apply call. Minted per plan; a new plan replaces the held one.
|
|
115
|
+
token: z.string(),
|
|
116
|
+
name: z.string().optional(),
|
|
117
|
+
items: z.array(DefinitionItemSchema),
|
|
118
|
+
// What is already known not to move mechanically (credentials to enter, an overlay to approve), surfaced
|
|
119
|
+
// at PREVIEW time so the owner ticks with open eyes, the migration surface's rule.
|
|
120
|
+
needsAction: z.array(DefinitionActionSchema),
|
|
121
|
+
});
|
|
122
|
+
export type DefinitionPlan = z.infer<typeof DefinitionPlanSchema>;
|
|
123
|
+
|
|
124
|
+
export const DefinitionApplySchema = z.object({
|
|
125
|
+
token: z.string(),
|
|
126
|
+
// The ticked item ids. Ids the re-derived plan does not contain are ignored rather than erroring.
|
|
127
|
+
items: z.array(z.string()),
|
|
128
|
+
});
|
|
129
|
+
export type DefinitionApply = z.infer<typeof DefinitionApplySchema>;
|
|
130
|
+
|
|
131
|
+
export const DefinitionReportSchema = z.object({
|
|
132
|
+
applied: z.array(z.object({ id: z.string(), label: z.string() })),
|
|
133
|
+
// Ticked and did not land, each with the reason (a clone that failed, a full disk). Distinct from
|
|
134
|
+
// inapplicable items, which were never attempted.
|
|
135
|
+
failed: z.array(z.object({ id: z.string(), label: z.string(), error: z.string() })),
|
|
136
|
+
needsAction: z.array(DefinitionActionSchema),
|
|
137
|
+
});
|
|
138
|
+
export type DefinitionReport = z.infer<typeof DefinitionReportSchema>;
|
|
139
|
+
|
|
140
|
+
// Where this sandbox stands relative to a definition: one line per difference, empty when they agree. The
|
|
141
|
+
// drift answer, computable because the emitter is deterministic.
|
|
142
|
+
export const DefinitionDiffSchema = z.object({
|
|
143
|
+
differences: z.array(DefinitionActionSchema),
|
|
144
|
+
});
|
|
145
|
+
export type DefinitionDiff = z.infer<typeof DefinitionDiffSchema>;
|
|
146
|
+
|
|
147
|
+
/* ---- the bundle manifest, restated on the definition ----
|
|
148
|
+
*
|
|
149
|
+
* A bundle is DEFINITION + STATE: its manifest embeds the same definition `GET /definition` emits, and the
|
|
150
|
+
* tar entries behind it carry what no definition can reference (git dirs, transcripts, ledgers). One schema,
|
|
151
|
+
* two doors, which is what keeps the two formats from drifting into different answers about what an
|
|
152
|
+
* environment IS. Version 2 replaced the ad-hoc `environment` facts block with the definition; a v1 bundle is
|
|
153
|
+
* refused by version rather than guessed at, like any other manifest this daemon cannot read.
|
|
154
|
+
*/
|
|
155
|
+
export const BundleManifestSchema = z.object({
|
|
156
|
+
// Bumped when the layout changes in a way an older daemon would misread. Refused rather than guessed at.
|
|
157
|
+
version: z.literal(2),
|
|
158
|
+
// Where it came from, for the report's first line. Never used to authorize anything.
|
|
159
|
+
sandbox: z.object({ name: z.string() }).optional(),
|
|
160
|
+
createdAt: z.number(),
|
|
161
|
+
// The owner's export-time choice; the restorer re-derives every decision from the manifests rather than
|
|
162
|
+
// trusting this, and uses it only to explain what is missing.
|
|
163
|
+
secrets: z.boolean(),
|
|
164
|
+
// The declarable shape, exactly what a definition export emits, so the restore report reasons over the
|
|
165
|
+
// same facts either door delivers.
|
|
166
|
+
definition: SandboxDefinitionSchema,
|
|
167
|
+
// Every path class the bundle deliberately left out, with the manifest's own note where it has one. This is
|
|
168
|
+
// what turns "the export skipped things" from a silence into a list the owner can act on.
|
|
169
|
+
excluded: z.array(z.object({ path: z.string(), portability: z.string(), note: z.string().optional() })),
|
|
170
|
+
});
|
|
171
|
+
export type BundleManifest = z.infer<typeof BundleManifestSchema>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { documentOf, documentTitle, isDocumentPath, isPlanDocumentPath, PLAN_DOCUMENTS_DIR } from "./documents.js";
|
|
3
|
+
|
|
4
|
+
const write = (path: string, newText: string, extra: { oldText?: string; truncated?: boolean } = {}) => [
|
|
5
|
+
{ type: "diff" as const, path, newText, ...extra },
|
|
6
|
+
];
|
|
7
|
+
|
|
8
|
+
describe("documentOf", () => {
|
|
9
|
+
test("a markdown file written whole is a document, titled by its opening heading", () => {
|
|
10
|
+
expect(documentOf("Write", write("docs/findings.md", "# Why it is slow\n\nBecause of the poll."))).toEqual({
|
|
11
|
+
path: "docs/findings.md",
|
|
12
|
+
title: "Why it is slow",
|
|
13
|
+
markdown: "# Why it is slow\n\nBecause of the poll.",
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test("a plan file says so, which is what gives it the plan card's face", () => {
|
|
18
|
+
const document = documentOf("Write", write(`${PLAN_DOCUMENTS_DIR}/wiggly-spring.md`, "## The plan\n\nStep one."));
|
|
19
|
+
expect(document?.plan).toBe(true);
|
|
20
|
+
expect(document?.title).toBe("The plan");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("carries the wire cap forward, so a clipped document can say it is clipped", () => {
|
|
24
|
+
expect(documentOf("Write", write("notes.md", "# Notes", { truncated: true }))?.truncated).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("an EDIT to a document is not one: its newText is a fragment, and the change is what a reader wants", () => {
|
|
28
|
+
expect(documentOf("Edit", write("docs/findings.md", "a replaced paragraph", { oldText: "the old paragraph" }))).toBeUndefined();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("code is not a document, whatever it was written with", () => {
|
|
32
|
+
expect(documentOf("Write", write("src/foo.ts", "export const x = 1;"))).toBeUndefined();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("a call with no diff has written nothing to show", () => {
|
|
36
|
+
expect(documentOf("Write", [{ type: "text", text: "File created successfully." }])).toBeUndefined();
|
|
37
|
+
expect(documentOf("Write", undefined)).toBeUndefined();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("names arrive in whatever case a backend spells them", () => {
|
|
41
|
+
expect(documentOf("write", write("notes.md", "# Notes"))?.path).toBe("notes.md");
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe("documentTitle", () => {
|
|
46
|
+
test("falls back to the file name when the document opens with prose", () => {
|
|
47
|
+
expect(documentTitle("No heading here, just prose.", "docs/some-notes.md")).toBe("some-notes.md");
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("takes the heading whatever its depth", () => {
|
|
51
|
+
expect(documentTitle("###### deep\n", "notes.md")).toBe("deep");
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
describe("paths", () => {
|
|
56
|
+
test("markdown, by either extension, in any case", () => {
|
|
57
|
+
expect(isDocumentPath("a/b.md")).toBe(true);
|
|
58
|
+
expect(isDocumentPath("a/b.MARKDOWN")).toBe(true);
|
|
59
|
+
expect(isDocumentPath("a/b.txt")).toBe(false);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("a plan is one by where it lives, not by what it is called", () => {
|
|
63
|
+
expect(isPlanDocumentPath(`${PLAN_DOCUMENTS_DIR}/anything.md`)).toBe(true);
|
|
64
|
+
expect(isPlanDocumentPath("docs/plans/anything.md")).toBe(false);
|
|
65
|
+
});
|
|
66
|
+
});
|
package/src/documents.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { STATE_DIR } from "@intentic/constants";
|
|
2
|
+
import type { CardDocument, ToolCallContent } from "./events.js";
|
|
3
|
+
import { planParts } from "./title.js";
|
|
4
|
+
|
|
5
|
+
/* A DOCUMENT A TURN WROTE FOR A PERSON TO READ, told apart from the files it changed for the machine.
|
|
6
|
+
*
|
|
7
|
+
* A transcript renders ACTS: a file was written, a command ran, a page was fetched. That is the right shape for
|
|
8
|
+
* nearly everything an agent does, and the wrong shape for the one thing it produces that is addressed to the
|
|
9
|
+
* reader. An analysis, a findings write-up, a plan: the card for those said `Write · +135 −0` and folded, so the
|
|
10
|
+
* document the next question was ABOUT was the one thing the chat would not show. Worse, the model reaches for a
|
|
11
|
+
* file precisely BECAUSE prose in the answer is expensive, so the better it behaves the less the reader sees.
|
|
12
|
+
*
|
|
13
|
+
* The rules live here, in the contract, because both sides run them and they must not drift: the daemon reads
|
|
14
|
+
* them to decide what a parked card is about (agent.ts), the browser to decide how a tool card draws
|
|
15
|
+
* (toolPresentation.ts). Two copies would let a card render a document the question card had never heard of.
|
|
16
|
+
*
|
|
17
|
+
* ONLY A WHOLE-FILE WRITE COUNTS. An Edit's `newText` is the replacement fragment, not the document: rendered as
|
|
18
|
+
* prose it is a mid-sentence slice with no heading, and the DIFF is what a reader wants from an edit anyway. So
|
|
19
|
+
* a Write of a markdown file is a document, and an edit to one stays a diff. */
|
|
20
|
+
|
|
21
|
+
/* WHERE THE CLI'S PLAN FILES LAND, workspace-relative.
|
|
22
|
+
*
|
|
23
|
+
* `~/.claude/plans` is a symlink onto this directory (sessions/session-store.ts links the SDK's conversation
|
|
24
|
+
* state onto the workspace volume), which makes a plan file the one document with a HARNESS-OWNED address: no
|
|
25
|
+
* guessing whether prose is a plan, no threshold on length, the path says so. That is why plan documents get
|
|
26
|
+
* their own treatment while everything else rides the general markdown rule above. */
|
|
27
|
+
export const PLAN_DOCUMENTS_DIR = `${STATE_DIR}/records/sessions/claude/plans`;
|
|
28
|
+
|
|
29
|
+
// Prose, by extension. Deliberately short: a document is something the chat can RENDER, and markdown is what
|
|
30
|
+
// the chat's prose pipeline speaks. A `.txt` report would render as an unstyled wall and reads better as the
|
|
31
|
+
// plain text box it already gets.
|
|
32
|
+
const DOCUMENT_EXTENSIONS = [".md", ".markdown"];
|
|
33
|
+
|
|
34
|
+
export const isDocumentPath = (path: string): boolean => {
|
|
35
|
+
const lower = path.toLowerCase();
|
|
36
|
+
return DOCUMENT_EXTENSIONS.some((extension) => lower.endsWith(extension));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Whether a path is one of the CLI's plan files. Matched on the directory rather than on the name, which is a
|
|
40
|
+
// mint-fresh three-word phrase (`map-of-this-wiggly-spring.md`) carrying no signal at all.
|
|
41
|
+
export const isPlanDocumentPath = (path: string): boolean => path.startsWith(`${PLAN_DOCUMENTS_DIR}/`);
|
|
42
|
+
|
|
43
|
+
/* What a document is CALLED. Its opening heading when it has one, which is the line the author wrote to name
|
|
44
|
+
* the whole thing (planParts, the same split the plan card titles from), and its file name when it does not.
|
|
45
|
+
*
|
|
46
|
+
* Never the path: a card that says `.intentic/records/sessions/claude/plans/map-of-this-wiggly-spring.md`
|
|
47
|
+
* has told the reader nothing about what is in it, and that string is the CLI's mint, not anybody's title. */
|
|
48
|
+
export const documentTitle = (markdown: string, path: string): string => planParts(markdown).title ?? path.split("/").pop() ?? path;
|
|
49
|
+
|
|
50
|
+
/* The document a tool call produced, or undefined when it produced none, the ONE test both sides ask.
|
|
51
|
+
*
|
|
52
|
+
* Reads the call's structured diff rather than its result text, because the content is already there: a Write's
|
|
53
|
+
* whole file rides the tool_call frame as `newText` (capped at the wire limit, which `truncated` reports), so
|
|
54
|
+
* nothing has to be re-read from disk to draw it, and a published transcript with no workspace behind it draws
|
|
55
|
+
* exactly the same document. */
|
|
56
|
+
export const documentOf = (name: string, content: readonly ToolCallContent[] | undefined): CardDocument | undefined => {
|
|
57
|
+
if (name.toLowerCase() !== "write") {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const diff = content?.find((entry) => entry.type === "diff" && isDocumentPath(entry.path));
|
|
61
|
+
if (diff === undefined || diff.type !== "diff") {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
path: diff.path,
|
|
66
|
+
title: documentTitle(diff.newText, diff.path),
|
|
67
|
+
markdown: diff.newText,
|
|
68
|
+
...(diff.truncated === true ? { truncated: true } : {}),
|
|
69
|
+
...(isPlanDocumentPath(diff.path) ? { plan: true } : {}),
|
|
70
|
+
};
|
|
71
|
+
};
|