@intentic/sandbox-contract 1.217.0 → 1.218.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/publish-drafts.js +1 -1
- package/dist/publish-drafts.js.map +1 -1
- package/dist/schemas.d.ts +6 -1
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +2 -1
- package/dist/schemas.js.map +1 -1
- package/dist/workspace-state.d.ts +64 -54
- package/dist/workspace-state.d.ts.map +1 -1
- package/dist/workspace-state.js +93 -64
- package/dist/workspace-state.js.map +1 -1
- package/package.json +4 -4
- package/src/contracts/extensions.contract.ts +1 -1
- package/src/contracts/settings.contract.ts +1 -1
- package/src/events.ts +2 -2
- package/src/publish-drafts.ts +1 -1
- package/src/schemas.ts +45 -39
- package/src/workspace-state.test.ts +226 -79
- package/src/workspace-state.ts +240 -68
package/dist/workspace-state.js
CHANGED
|
@@ -1,257 +1,286 @@
|
|
|
1
1
|
import { STATE_DIR } from "@intentic/constants";
|
|
2
2
|
const STATE_FILES = [
|
|
3
3
|
{
|
|
4
|
-
path: ".intentic/capabilities.json",
|
|
4
|
+
path: ".intentic/config/capabilities.json",
|
|
5
5
|
invalidates: ["capabilities", "environment", "panels", "manifests"],
|
|
6
6
|
portability: "carry",
|
|
7
7
|
versioned: true,
|
|
8
8
|
},
|
|
9
|
-
{ path: ".intentic/capability-dismissals.json", invalidates: ["capabilities"], portability: "carry", versioned: true },
|
|
10
|
-
{ path: ".intentic/secret-uses.json", invalidates: ["secrets"], portability: "carry" },
|
|
11
|
-
{ path: ".intentic/personas.json", invalidates: ["personas", "capabilities", "manifests"], portability: "carry", versioned: true },
|
|
12
|
-
{ path: ".intentic/environment.custom.Dockerfile", invalidates: ["environment"], portability: "carry", versioned: true },
|
|
13
|
-
{ path: ".intentic/environment.Dockerfile", invalidates: ["environment"], portability: "carry", versioned: true },
|
|
14
|
-
{ path: ".intentic/environment.d/", invalidates: ["environment"], portability: "carry", versioned: true },
|
|
9
|
+
{ path: ".intentic/config/capability-dismissals.json", invalidates: ["capabilities"], portability: "carry", versioned: true },
|
|
10
|
+
{ path: ".intentic/records/secret-uses.json", invalidates: ["secrets"], portability: "carry" },
|
|
11
|
+
{ path: ".intentic/config/personas.json", invalidates: ["personas", "capabilities", "manifests"], portability: "carry", versioned: true },
|
|
12
|
+
{ path: ".intentic/config/environment.custom.Dockerfile", invalidates: ["environment"], portability: "carry", versioned: true },
|
|
13
|
+
{ path: ".intentic/config/environment.Dockerfile", invalidates: ["environment"], portability: "carry", versioned: true },
|
|
14
|
+
{ path: ".intentic/config/environment.d/", invalidates: ["environment"], portability: "carry", versioned: true },
|
|
15
15
|
{
|
|
16
|
-
path: ".intentic/environment.approved.Dockerfile",
|
|
16
|
+
path: ".intentic/local/environment.approved.Dockerfile",
|
|
17
17
|
invalidates: ["environment"],
|
|
18
18
|
portability: "derived",
|
|
19
19
|
note: "The target composes its own overlay on first boot; rebuild it there to install the tools it names.",
|
|
20
20
|
},
|
|
21
|
-
{ path: ".intentic/settings.json", invalidates: ["settings", "manifests"], portability: "carry", versioned: true },
|
|
21
|
+
{ path: ".intentic/config/settings.json", invalidates: ["settings", "manifests"], portability: "carry", versioned: true },
|
|
22
22
|
{
|
|
23
|
-
path: ".intentic/rule-firings.json",
|
|
23
|
+
path: ".intentic/local/rule-firings.json",
|
|
24
24
|
invalidates: ["rule-firings"],
|
|
25
25
|
portability: "derived",
|
|
26
26
|
note: "Stamps of when each rule last did something; the new sandbox starts its own record.",
|
|
27
27
|
},
|
|
28
|
-
{ path: ".intentic/drafts/", invalidates: ["drafts"], portability: "carry", versioned: true, authored: true },
|
|
28
|
+
{ path: ".intentic/config/drafts/", invalidates: ["drafts"], portability: "carry", versioned: true, authored: true },
|
|
29
29
|
{
|
|
30
|
-
path: ".intentic/automations.json",
|
|
30
|
+
path: ".intentic/config/automations.json",
|
|
31
31
|
invalidates: [],
|
|
32
32
|
why: "Declared by the intentic.automations extension's contributes.files — `automations` is its query key, not core's.",
|
|
33
33
|
portability: "carry",
|
|
34
34
|
versioned: true,
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
path: ".intentic/automation-runs.json",
|
|
37
|
+
path: ".intentic/records/automation-runs.json",
|
|
38
38
|
invalidates: [],
|
|
39
39
|
why: "Declared by the intentic.automations extension's contributes.files — `automations` is its query key, not core's.",
|
|
40
40
|
portability: "carry",
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
path: ".intentic/approvals/",
|
|
43
|
+
path: ".intentic/records/approvals/",
|
|
44
44
|
invalidates: [],
|
|
45
45
|
why: "Declared by the intentic.automations extension's contributes.files — `automation-approvals` is its query key, not core's.",
|
|
46
46
|
portability: "carry",
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
|
-
path: ".intentic/chores/",
|
|
49
|
+
path: ".intentic/records/chores/",
|
|
50
50
|
invalidates: [],
|
|
51
51
|
why: "Declared by the intentic.maintenance extension's contributes.files — `maintenance-report`/`maintenance-runs` are its query keys, not core's.",
|
|
52
52
|
portability: "carry",
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
path: ".intentic/docs/",
|
|
55
|
+
path: ".intentic/config/docs/",
|
|
56
56
|
invalidates: [],
|
|
57
57
|
why: "Declared by the intentic.documentation extension's contributes.files — `documentation`/`documentation-runs` are its query keys, not core's.",
|
|
58
58
|
portability: "carry",
|
|
59
59
|
authored: true,
|
|
60
60
|
outsideWriter: "the intentic.documentation extension's staging writes (its paths.ts)",
|
|
61
61
|
},
|
|
62
|
-
{ path: ".intentic/workflows.json", invalidates: ["workflows"], portability: "carry", versioned: true },
|
|
63
|
-
{ path: ".intentic/workflow-runs.json", invalidates: ["workflows", "workflow-runs"], portability: "carry" },
|
|
64
|
-
{ path: ".intentic/loop-designs.json", invalidates: ["loop-designs"], portability: "carry", versioned: true },
|
|
62
|
+
{ path: ".intentic/config/workflows.json", invalidates: ["workflows"], portability: "carry", versioned: true },
|
|
63
|
+
{ path: ".intentic/records/workflow-runs.json", invalidates: ["workflows", "workflow-runs"], portability: "carry" },
|
|
64
|
+
{ path: ".intentic/config/loop-designs.json", invalidates: ["loop-designs"], portability: "carry", versioned: true },
|
|
65
65
|
{
|
|
66
|
-
path: ".intentic/loops.json",
|
|
66
|
+
path: ".intentic/records/loops.json",
|
|
67
67
|
invalidates: [],
|
|
68
68
|
why: "Ralph loops and their iteration history. Nothing observes it: where a RUNNING loop stands rides on the fleet roster (AgentSummary.loop), which the /events stream already pushes about once a second, and a second source invalidating on this file could only ever disagree with the card beside it. The iteration list of an ENDED loop is an on-demand read — nothing renders it until someone opens it (web's useLoops, which holds no query for exactly this reason).",
|
|
69
69
|
portability: "carry",
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
|
-
path: ".intentic/webchat-installs.json",
|
|
72
|
+
path: ".intentic/records/webchat-installs.json",
|
|
73
73
|
invalidates: [],
|
|
74
|
-
why: "Which origins have loaded a
|
|
74
|
+
why: "Which origins have loaded a Front Desk's widget, written on a 30s flush timer while a customer's site serves page views. The install panel that renders it fetches on open and polls itself while it is on screen, which is the whole window in which the answer changes for anyone. Pushing instead would bill every connected browser a refetch per flush, for a panel almost nobody has open.",
|
|
75
75
|
portability: "carry",
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
|
-
path: ".intentic/thread-sessions.json",
|
|
78
|
+
path: ".intentic/records/thread-sessions.json",
|
|
79
79
|
invalidates: [],
|
|
80
|
-
why: "Thread bookkeeping (an inbound thread — a
|
|
80
|
+
why: "Thread bookkeeping (an inbound thread — a Front Desk visitor, a Discord or Slack channel — → sandbox conversation + provider session), written on EVERY inbound message. Nothing in the browser reads it: what a thread produces is a conversation, and the fleet board already learns about that from the agent registry's own push. Naming a key here would bill every connected browser a refetch per inbound message — the request storm this table's own note warns about — to refresh nothing it can see.",
|
|
81
81
|
portability: "carry",
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
|
-
path: ".intentic/extension-settings.json",
|
|
84
|
+
path: ".intentic/config/extension-settings.json",
|
|
85
85
|
invalidates: [],
|
|
86
86
|
why: "Held in a module-level shallowRef store per extension (web's extensionSettingsStore) with no query observer, and deliberately so: api.settings.get must answer SYNCHRONOUSLY from an extension's first activate() line, and the store outlives every component scope. A module-level QueryObserver is the one shape that would make invalidation refetch, and this app already ruled it out — it detaches on the queryClient.clear() at logout (see useSandbox's sandbox-list mirror). So a remote member's setting edit reaches this browser on its next load, not live.",
|
|
87
87
|
portability: "carry",
|
|
88
88
|
versioned: true,
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
|
-
path: ".intentic/extension-enablement.json",
|
|
91
|
+
path: ".intentic/config/extension-enablement.json",
|
|
92
92
|
invalidates: ["extensions"],
|
|
93
93
|
portability: "carry",
|
|
94
94
|
versioned: true,
|
|
95
95
|
},
|
|
96
|
-
{ path: ".intentic/workspace-extensions/", invalidates: ["extensions"], portability: "carry", versioned: true, authored: true },
|
|
97
|
-
{ path: ".intentic/extension-updates.json", invalidates: ["extensions"], portability: "carry" },
|
|
98
|
-
{ path: ".intentic/extension-update-policy.json", invalidates: ["extensions"], portability: "carry", versioned: true },
|
|
96
|
+
{ path: ".intentic/config/workspace-extensions/", invalidates: ["extensions"], portability: "carry", versioned: true, authored: true },
|
|
97
|
+
{ path: ".intentic/records/extension-updates.json", invalidates: ["extensions"], portability: "carry" },
|
|
98
|
+
{ path: ".intentic/config/extension-update-policy.json", invalidates: ["extensions"], portability: "carry", versioned: true },
|
|
99
99
|
{
|
|
100
|
-
path: ".intentic/extension-usage.json",
|
|
100
|
+
path: ".intentic/records/extension-usage.json",
|
|
101
101
|
invalidates: [],
|
|
102
102
|
why: "Which of the routes each extension DECLARED it has actually called — the evidence behind the permissions list on its row. The one entry here whose empty set is a RATE decision rather than an architectural one: every browser with the app open reports its batch on a timer, so wiring this to the `extensions` query would refetch the whole list every few seconds for a figure nobody is watching change. The tab reads it when it loads, which is when anyone is reading it.",
|
|
103
103
|
portability: "carry",
|
|
104
104
|
},
|
|
105
105
|
{
|
|
106
|
-
path: ".intentic/members.json",
|
|
106
|
+
path: ".intentic/identity/members.json",
|
|
107
107
|
invalidates: [],
|
|
108
108
|
why: "Not this view's source at all: SandboxAccess renders the PLATFORM's invite records (apiClient.invite.list), and this file is the daemon's ENFORCED copy — written first so a grant the enforcer never got is never recorded, then never read back. A change here means the two disagreed, which the write order makes fail-closed rather than stale.",
|
|
109
109
|
portability: "identity",
|
|
110
110
|
note: "Re-invite collaborators from the Access tab — a grant is the platform's record, and the target enforces its own copy.",
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
|
-
path: ".intentic/auth/",
|
|
113
|
+
path: ".intentic/secrets/auth/",
|
|
114
114
|
invalidates: [],
|
|
115
115
|
why: "AI-provider credentials and runtime homes, plus the capability and extension-settings secret vaults; each account is rendered through owner-gated provider routes.",
|
|
116
116
|
portability: "secret",
|
|
117
117
|
note: "Sign the agent's AI accounts in again on the Agent tab, then re-enter each connection's credential on Capabilities and each extension's secret settings on Extensions — both arrived listed but unauthenticated.",
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
|
-
path: ".intentic/sessions/claude/",
|
|
120
|
+
path: ".intentic/records/sessions/claude/",
|
|
121
121
|
invalidates: [],
|
|
122
122
|
why: "Agent session transcripts — see the note above on why the memory notes under it stay polled.",
|
|
123
123
|
portability: "carry",
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
|
-
path: ".intentic/artifacts/",
|
|
126
|
+
path: ".intentic/records/artifacts/",
|
|
127
127
|
invalidates: [],
|
|
128
128
|
why: "Durable outputs owned by conversations and extension runs: attachments, browser captures, generated images, acceptance reports, workflow step reports, voice transcripts, and loop ledgers.",
|
|
129
129
|
portability: "carry",
|
|
130
130
|
},
|
|
131
131
|
{
|
|
132
|
-
path: ".intentic/cache/",
|
|
132
|
+
path: ".intentic/local/cache/",
|
|
133
133
|
invalidates: [],
|
|
134
134
|
why: "Rebuildable indexes and caches — the iq index and its vector sidecar, the whisper model; ignored by the watcher and recreated from carried workspace content.",
|
|
135
135
|
portability: "derived",
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
|
-
path: ".intentic/runtime/",
|
|
138
|
+
path: ".intentic/local/runtime/",
|
|
139
139
|
invalidates: [],
|
|
140
140
|
why: "Extension runtime scratch (watermarks, cached short-lived tokens); nothing renders it and gateways re-derive it.",
|
|
141
141
|
portability: "derived",
|
|
142
142
|
outsideWriter: "extensions, through extensionRuntimeDir below",
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
|
-
path: ".intentic/tmp/",
|
|
145
|
+
path: ".intentic/local/tmp/",
|
|
146
146
|
invalidates: [],
|
|
147
147
|
why: "Scratch that agents and tools leave behind (build logs, demo checkouts); nothing reads it after the turn that wrote it. The state janitor empties it at boot.",
|
|
148
148
|
portability: "derived",
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
|
-
path: ".intentic/.pnpm-store/",
|
|
151
|
+
path: ".intentic/local/.pnpm-store/",
|
|
152
152
|
invalidates: [],
|
|
153
153
|
why: "pnpm's content-addressable store, auto-created by installs run from under .intentic; the next install rebuilds it.",
|
|
154
154
|
portability: "derived",
|
|
155
155
|
outsideWriter: "pnpm itself, when an install runs from under .intentic",
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
|
-
path: ".intentic/newest-run.json",
|
|
158
|
+
path: ".intentic/local/newest-run.json",
|
|
159
159
|
invalidates: [],
|
|
160
160
|
why: "The newest daemon version that ever ran this workspace (store/newest-run.ts) — a downgrade tripwire, about THIS sandbox the way rule-firings is.",
|
|
161
161
|
portability: "derived",
|
|
162
162
|
note: "The target stamps its own daemon version on first boot.",
|
|
163
163
|
},
|
|
164
164
|
{
|
|
165
|
-
path: ".intentic/verify.json",
|
|
165
|
+
path: ".intentic/records/verify.json",
|
|
166
166
|
invalidates: [],
|
|
167
167
|
why: "The dependency verifier's verdict memory; nothing renders it directly — outcomes reach the owner as activity entries and workspace events.",
|
|
168
168
|
portability: "carry",
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
|
-
path: ".intentic/verify/",
|
|
171
|
+
path: ".intentic/local/verify/",
|
|
172
172
|
invalidates: [],
|
|
173
173
|
why: "A running check's wrapper artifacts (log + exit status), read once by the daemon when the panel finishes.",
|
|
174
174
|
portability: "derived",
|
|
175
175
|
},
|
|
176
176
|
{
|
|
177
|
-
path: ".intentic/ci.json",
|
|
177
|
+
path: ".intentic/secrets/ci.json",
|
|
178
178
|
invalidates: [],
|
|
179
179
|
why: "Webhook secret + conclusion memory; the Pipelines view reads it through /ci/runs, not off disk.",
|
|
180
180
|
portability: "secret",
|
|
181
181
|
note: "Re-add the CI webhook on the Pipelines view — its secret is per-sandbox.",
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
|
-
path: ".intentic/control-tokens.json",
|
|
184
|
+
path: ".intentic/identity/control-tokens.json",
|
|
185
185
|
invalidates: [],
|
|
186
186
|
why: "Hashed control tokens (the ACP editor bridge, and anything else driving this sandbox from outside), listed on demand by the owner.",
|
|
187
187
|
portability: "identity",
|
|
188
|
+
backup: false,
|
|
188
189
|
note: "Mint fresh control tokens — the old ones authenticate against the source sandbox.",
|
|
189
190
|
},
|
|
190
191
|
{
|
|
191
|
-
path: ".intentic/owner.json",
|
|
192
|
+
path: ".intentic/identity/owner.json",
|
|
192
193
|
invalidates: [],
|
|
193
194
|
why: "Bound once on first use; a change here means the sandbox was re-owned, which re-authenticates anyway.",
|
|
194
195
|
portability: "identity",
|
|
195
196
|
},
|
|
196
197
|
{
|
|
197
|
-
path: ".intentic/workspace.json",
|
|
198
|
+
path: ".intentic/identity/workspace.json",
|
|
198
199
|
invalidates: [],
|
|
199
200
|
why: "The workspace identity, read from the /events hello frame rather than as a file.",
|
|
200
201
|
portability: "identity",
|
|
201
202
|
},
|
|
202
203
|
{
|
|
203
|
-
path: ".intentic/templates.json",
|
|
204
|
+
path: ".intentic/config/templates.json",
|
|
204
205
|
invalidates: [],
|
|
205
206
|
why: "Scaffold templates, read when the scaffold dialog opens.",
|
|
206
207
|
portability: "carry",
|
|
207
208
|
versioned: true,
|
|
208
209
|
},
|
|
209
210
|
{
|
|
210
|
-
path: ".intentic/browser/",
|
|
211
|
+
path: ".intentic/local/browser/",
|
|
211
212
|
invalidates: [],
|
|
212
213
|
why: "Browser-login profiles: Chromium rewrites these constantly. Descent-ignored by the watcher outright.",
|
|
213
214
|
portability: "derived",
|
|
214
215
|
note: "Log the agent's browser back into any site it needs — profiles do not travel.",
|
|
215
216
|
},
|
|
216
217
|
{
|
|
217
|
-
path: ".intentic/extensions/",
|
|
218
|
+
path: ".intentic/local/extensions/",
|
|
218
219
|
invalidates: [],
|
|
219
220
|
why: "Extension checkouts — whole git clones. The `extensions` query is driven by the capability manifest above, not by their contents.",
|
|
220
221
|
portability: "derived",
|
|
221
222
|
note: "Extensions re-clone from the capability manifest on the target's next reconcile.",
|
|
222
223
|
},
|
|
223
|
-
{ path: ".intentic/plugins/", invalidates: [], why: "Agent plugin dirs, read by the SDK's loader each turn.", portability: "carry" },
|
|
224
|
-
{ path: ".intentic/skills/", invalidates: ["skills"], portability: "carry", versioned: true },
|
|
225
|
-
{ path: ".intentic/personas/", invalidates: ["personas"], portability: "carry", versioned: true },
|
|
224
|
+
{ path: ".intentic/records/plugins/", invalidates: [], why: "Agent plugin dirs, read by the SDK's loader each turn.", portability: "carry" },
|
|
225
|
+
{ path: ".intentic/config/skills/", invalidates: ["skills"], portability: "carry", versioned: true },
|
|
226
|
+
{ path: ".intentic/config/personas/", invalidates: ["personas"], portability: "carry", versioned: true },
|
|
226
227
|
];
|
|
227
228
|
export const WORKSPACE_STATE_FILES = STATE_FILES;
|
|
228
229
|
export const VERSIONED_STATE_PATHS = WORKSPACE_STATE_FILES.filter((file) => file.versioned).map((file) => file.path);
|
|
229
230
|
export const SEARCHABLE_STATE_PATHS = WORKSPACE_STATE_FILES.filter((file) => file.versioned || file.authored).map((file) => file.path);
|
|
230
|
-
export const
|
|
231
|
+
export const STATE_GROUP_DIR = {
|
|
232
|
+
config: `${STATE_DIR}/config`,
|
|
233
|
+
records: `${STATE_DIR}/records`,
|
|
234
|
+
local: `${STATE_DIR}/local`,
|
|
235
|
+
identity: `${STATE_DIR}/identity`,
|
|
236
|
+
secrets: `${STATE_DIR}/secrets`,
|
|
237
|
+
};
|
|
238
|
+
export const STATE_GROUPS = Object.keys(STATE_GROUP_DIR);
|
|
239
|
+
export const stateGroupOf = (file) => {
|
|
240
|
+
switch (file.portability) {
|
|
241
|
+
case "secret":
|
|
242
|
+
return "secrets";
|
|
243
|
+
case "identity":
|
|
244
|
+
return "identity";
|
|
245
|
+
case "derived":
|
|
246
|
+
return "local";
|
|
247
|
+
case "carry":
|
|
248
|
+
return file.versioned === true || file.authored === true ? "config" : "records";
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
export const stateGroupPaths = (group) => WORKSPACE_STATE_FILES.filter((file) => stateGroupOf(file) === group).map((file) => file.path);
|
|
252
|
+
export const BACKED_UP_STATE_PATHS = WORKSPACE_STATE_FILES.filter((file) => file.backup !== false && (file.portability === "carry" || file.portability === "identity")).map((file) => file.path);
|
|
253
|
+
export const UNBACKED_STATE_PATHS = WORKSPACE_STATE_FILES.filter((file) => !BACKED_UP_STATE_PATHS.includes(file.path)).map((file) => file.path);
|
|
254
|
+
export const extensionRuntimeDir = (extension) => `${STATE_GROUP_DIR.local}/runtime/extensions/${extension.replaceAll(/[^a-zA-Z0-9._-]/g, "_")}`;
|
|
231
255
|
export const REPORTED_MANIFEST_PATHS = WORKSPACE_STATE_FILES.filter((file) => file.invalidates.includes("manifests")).map((file) => file.path);
|
|
232
256
|
export const isReportedManifest = (relPath) => REPORTED_MANIFEST_PATHS.includes(relPath.replaceAll("\\", "/"));
|
|
233
257
|
export const RETIRED_WORKSPACE_STATE_DIRS = {
|
|
234
|
-
secret: ["claude", "codex", "kimi", "opencode", "cliproxy"],
|
|
235
|
-
|
|
236
|
-
|
|
258
|
+
secret: ["claude", "codex", "kimi", "opencode", "cliproxy", "auth", "ci.json"],
|
|
259
|
+
identity: ["owner.json", "members.json", "workspace.json", "control-tokens.json"],
|
|
260
|
+
derived: ["iq", "extensions-runtime", "whisper", "browser/output", "browser", "cache", "runtime", "tmp", ".pnpm-store", "extensions", "verify"],
|
|
261
|
+
artifacts: ["attachments", "acceptance", "loops", "workflow-runs", "transcripts", "artifacts", "sessions"],
|
|
237
262
|
};
|
|
238
263
|
const LOCKED_STATE_ENTRIES = new Set([
|
|
239
|
-
"owner.json",
|
|
240
|
-
"members.json",
|
|
241
|
-
"
|
|
242
|
-
"
|
|
264
|
+
"identity/owner.json",
|
|
265
|
+
"identity/members.json",
|
|
266
|
+
"identity/control-tokens.json",
|
|
267
|
+
"config/capabilities.json",
|
|
268
|
+
"secrets/ci.json",
|
|
269
|
+
"secrets/auth",
|
|
270
|
+
"records/sessions",
|
|
271
|
+
"local/browser",
|
|
243
272
|
"claude.json",
|
|
244
|
-
"auth",
|
|
245
|
-
"sessions",
|
|
246
|
-
"browser",
|
|
247
|
-
...RETIRED_WORKSPACE_STATE_DIRS.secret,
|
|
248
273
|
]);
|
|
249
274
|
export const isLockedWorkspacePath = (relPath) => {
|
|
250
275
|
const segments = relPath.split(/[\\/]/).filter((segment) => segment !== "" && segment !== ".");
|
|
251
276
|
if (segments[0] === ".git") {
|
|
252
277
|
return true;
|
|
253
278
|
}
|
|
254
|
-
|
|
279
|
+
if (segments[0] !== STATE_DIR) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return (LOCKED_STATE_ENTRIES.has(segments.slice(1, 3).join("/")) ||
|
|
283
|
+
(segments.length >= 2 && RETIRED_WORKSPACE_STATE_DIRS.secret.includes(segments[1])));
|
|
255
284
|
};
|
|
256
285
|
export const isReviewableLockedPath = (relPath) => {
|
|
257
286
|
const rel = relPath.replaceAll("\\", "/").replace(/^\.\//, "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-state.js","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
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.218.1",
|
|
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,9 +89,9 @@
|
|
|
89
89
|
"@orpc/contract": "1.14.13",
|
|
90
90
|
"tslib": "2.8.1",
|
|
91
91
|
"zod": "4.4.3",
|
|
92
|
-
"@intentic/
|
|
93
|
-
"@intentic/registry": "1.
|
|
94
|
-
"@intentic/
|
|
92
|
+
"@intentic/constants": "1.218.1",
|
|
93
|
+
"@intentic/registry": "1.218.1",
|
|
94
|
+
"@intentic/extension-manifest": "1.218.1"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|
|
97
97
|
"@types/node": "24.13.2",
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
// declared are refused, the same honesty rule the host applies to runtime view/command registrations.
|
|
26
26
|
export const extensionsContract = {
|
|
27
27
|
list: oc.route({ method: "GET", path: "/extensions" }).output(ExtensionsListSchema),
|
|
28
|
-
// Author a new extension in place: writes a running one into .intentic/workspace-extensions/<name>/. The only
|
|
28
|
+
// Author a new extension in place: writes a running one into .intentic/config/workspace-extensions/<name>/. The only
|
|
29
29
|
// creating route here, and it exists because that directory is otherwise reachable exclusively through an
|
|
30
30
|
// agent's file tools — which is a fine way to CHANGE an extension and a poor way to meet the idea of one.
|
|
31
31
|
create: oc.route({ method: "POST", path: "/extensions/workspace" }).input(WorkspaceExtensionCreateSchema).output(WorkspaceExtensionCreatedSchema),
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
SavingsReportSchema,
|
|
10
10
|
} from "../schemas.js";
|
|
11
11
|
|
|
12
|
-
// Per-sandbox agent settings (.intentic/settings.json). `get` returns the current flags with defaults applied
|
|
12
|
+
// Per-sandbox agent settings (.intentic/config/settings.json). `get` returns the current flags with defaults applied
|
|
13
13
|
// when the file is absent; `set` overwrites them. `savings` reports what each token-reduction mechanism was
|
|
14
14
|
// worth — the cleaners' realized per-command savings and the terse steer's measured A/B — over an inclusive
|
|
15
15
|
// UTC day window, the same one the spend ledger takes, so a screen can filter both with one calendar.
|
package/src/events.ts
CHANGED
|
@@ -170,8 +170,8 @@ export type ToolCallLocation = z.infer<typeof ToolCallLocationSchema>;
|
|
|
170
170
|
// previous content. Sides are capped daemon-side; `truncated` marks a clipped side.
|
|
171
171
|
//
|
|
172
172
|
// `image` is a PICTURE THE TOOL PRODUCED, carried as a workspace path rather than as bytes. Browser screenshots
|
|
173
|
-
// already live under .intentic/artifacts/browser, and provider-generated images are copied into
|
|
174
|
-
// .intentic/artifacts/imagegen, so the client fetches either from /workspace/raw like any other file. Base64 on
|
|
173
|
+
// already live under .intentic/records/artifacts/browser, and provider-generated images are copied into
|
|
174
|
+
// .intentic/records/artifacts/imagegen, so the client fetches either from /workspace/raw like any other file. Base64 on
|
|
175
175
|
// the wire would bloat the event stream and every stored transcript to show bytes the workspace already serves;
|
|
176
176
|
// the path also keeps the picture openable afterwards. Root-relative, forward-slash: the same route space as
|
|
177
177
|
// ToolCallLocation.
|
package/src/publish-drafts.ts
CHANGED
|
@@ -41,7 +41,7 @@ export const DIRECT_PUBLISH_PLATFORMS: ReadonlySet<string> = new Set(["discord"]
|
|
|
41
41
|
* that went out without saying so is a post the owner sends twice. */
|
|
42
42
|
export const publishTurnPrompt = (drafts: readonly { readonly id: string; readonly platform: string }[]): string =>
|
|
43
43
|
[
|
|
44
|
-
`Publish these approved post drafts, which are due now. They live in .intentic/drafts/, one JSON file each:`,
|
|
44
|
+
`Publish these approved post drafts, which are due now. They live in .intentic/config/drafts/, one JSON file each:`,
|
|
45
45
|
``,
|
|
46
46
|
...drafts.map((draft) => `- ${draft.id}.json (${draft.platform})`),
|
|
47
47
|
``,
|