inferoa 0.1.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/LICENSE +176 -0
- package/README.md +154 -0
- package/dist/src/app.d.ts +16 -0
- package/dist/src/app.js +17 -0
- package/dist/src/app.js.map +1 -0
- package/dist/src/autoresearch/state.d.ts +106 -0
- package/dist/src/autoresearch/state.js +469 -0
- package/dist/src/autoresearch/state.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +415 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/code-intelligence/codegraph-engine.d.ts +55 -0
- package/dist/src/code-intelligence/codegraph-engine.js +593 -0
- package/dist/src/code-intelligence/codegraph-engine.js.map +1 -0
- package/dist/src/code-intelligence/hub.d.ts +37 -0
- package/dist/src/code-intelligence/hub.js +65 -0
- package/dist/src/code-intelligence/hub.js.map +1 -0
- package/dist/src/config/config.d.ts +12 -0
- package/dist/src/config/config.js +229 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/defaults.d.ts +2 -0
- package/dist/src/config/defaults.js +44 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/secret-vault.d.ts +3 -0
- package/dist/src/config/secret-vault.js +106 -0
- package/dist/src/config/secret-vault.js.map +1 -0
- package/dist/src/context/compressor.d.ts +33 -0
- package/dist/src/context/compressor.js +501 -0
- package/dist/src/context/compressor.js.map +1 -0
- package/dist/src/context/prompt.d.ts +26 -0
- package/dist/src/context/prompt.js +572 -0
- package/dist/src/context/prompt.js.map +1 -0
- package/dist/src/daemon/serve.d.ts +2 -0
- package/dist/src/daemon/serve.js +11 -0
- package/dist/src/daemon/serve.js.map +1 -0
- package/dist/src/daemon/supervisor.d.ts +33 -0
- package/dist/src/daemon/supervisor.js +252 -0
- package/dist/src/daemon/supervisor.js.map +1 -0
- package/dist/src/goals/state.d.ts +105 -0
- package/dist/src/goals/state.js +736 -0
- package/dist/src/goals/state.js.map +1 -0
- package/dist/src/model/endpoint-signals.d.ts +15 -0
- package/dist/src/model/endpoint-signals.js +186 -0
- package/dist/src/model/endpoint-signals.js.map +1 -0
- package/dist/src/model/gateway.d.ts +11 -0
- package/dist/src/model/gateway.js +455 -0
- package/dist/src/model/gateway.js.map +1 -0
- package/dist/src/plans/state.d.ts +28 -0
- package/dist/src/plans/state.js +123 -0
- package/dist/src/plans/state.js.map +1 -0
- package/dist/src/runtime.d.ts +92 -0
- package/dist/src/runtime.js +757 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/session/store.d.ts +84 -0
- package/dist/src/session/store.js +593 -0
- package/dist/src/session/store.js.map +1 -0
- package/dist/src/session/workspace.d.ts +2 -0
- package/dist/src/session/workspace.js +14 -0
- package/dist/src/session/workspace.js.map +1 -0
- package/dist/src/skills/registry.d.ts +24 -0
- package/dist/src/skills/registry.js +203 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/tools/autoresearch-tools.d.ts +6 -0
- package/dist/src/tools/autoresearch-tools.js +412 -0
- package/dist/src/tools/autoresearch-tools.js.map +1 -0
- package/dist/src/tools/clarify-tool.d.ts +3 -0
- package/dist/src/tools/clarify-tool.js +107 -0
- package/dist/src/tools/clarify-tool.js.map +1 -0
- package/dist/src/tools/code-intelligence.d.ts +15 -0
- package/dist/src/tools/code-intelligence.js +391 -0
- package/dist/src/tools/code-intelligence.js.map +1 -0
- package/dist/src/tools/context.d.ts +11 -0
- package/dist/src/tools/context.js +2 -0
- package/dist/src/tools/context.js.map +1 -0
- package/dist/src/tools/goal-tools.d.ts +3 -0
- package/dist/src/tools/goal-tools.js +279 -0
- package/dist/src/tools/goal-tools.js.map +1 -0
- package/dist/src/tools/omni-tools.d.ts +8 -0
- package/dist/src/tools/omni-tools.js +349 -0
- package/dist/src/tools/omni-tools.js.map +1 -0
- package/dist/src/tools/permissions.d.ts +11 -0
- package/dist/src/tools/permissions.js +74 -0
- package/dist/src/tools/permissions.js.map +1 -0
- package/dist/src/tools/plan-tools.d.ts +3 -0
- package/dist/src/tools/plan-tools.js +314 -0
- package/dist/src/tools/plan-tools.js.map +1 -0
- package/dist/src/tools/process-tools.d.ts +6 -0
- package/dist/src/tools/process-tools.js +199 -0
- package/dist/src/tools/process-tools.js.map +1 -0
- package/dist/src/tools/registry.d.ts +20 -0
- package/dist/src/tools/registry.js +187 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/schemas.d.ts +3 -0
- package/dist/src/tools/schemas.js +500 -0
- package/dist/src/tools/schemas.js.map +1 -0
- package/dist/src/tools/skill-tools.d.ts +6 -0
- package/dist/src/tools/skill-tools.js +124 -0
- package/dist/src/tools/skill-tools.js.map +1 -0
- package/dist/src/tools/text-args.d.ts +5 -0
- package/dist/src/tools/text-args.js +22 -0
- package/dist/src/tools/text-args.js.map +1 -0
- package/dist/src/tools/web-search.d.ts +5 -0
- package/dist/src/tools/web-search.js +602 -0
- package/dist/src/tools/web-search.js.map +1 -0
- package/dist/src/tools/workspace-tools.d.ts +17 -0
- package/dist/src/tools/workspace-tools.js +561 -0
- package/dist/src/tools/workspace-tools.js.map +1 -0
- package/dist/src/tui/activity.d.ts +11 -0
- package/dist/src/tui/activity.js +75 -0
- package/dist/src/tui/activity.js.map +1 -0
- package/dist/src/tui/ansi.d.ts +24 -0
- package/dist/src/tui/ansi.js +131 -0
- package/dist/src/tui/ansi.js.map +1 -0
- package/dist/src/tui/app.d.ts +163 -0
- package/dist/src/tui/app.js +4204 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/cache-footer.d.ts +21 -0
- package/dist/src/tui/cache-footer.js +75 -0
- package/dist/src/tui/cache-footer.js.map +1 -0
- package/dist/src/tui/clarify.d.ts +14 -0
- package/dist/src/tui/clarify.js +187 -0
- package/dist/src/tui/clarify.js.map +1 -0
- package/dist/src/tui/composer.d.ts +79 -0
- package/dist/src/tui/composer.js +592 -0
- package/dist/src/tui/composer.js.map +1 -0
- package/dist/src/tui/event-view.d.ts +5 -0
- package/dist/src/tui/event-view.js +392 -0
- package/dist/src/tui/event-view.js.map +1 -0
- package/dist/src/tui/home.d.ts +7 -0
- package/dist/src/tui/home.js +92 -0
- package/dist/src/tui/home.js.map +1 -0
- package/dist/src/tui/markdown.d.ts +18 -0
- package/dist/src/tui/markdown.js +271 -0
- package/dist/src/tui/markdown.js.map +1 -0
- package/dist/src/tui/mode-footer.d.ts +9 -0
- package/dist/src/tui/mode-footer.js +62 -0
- package/dist/src/tui/mode-footer.js.map +1 -0
- package/dist/src/tui/plan-view.d.ts +8 -0
- package/dist/src/tui/plan-view.js +45 -0
- package/dist/src/tui/plan-view.js.map +1 -0
- package/dist/src/tui/prompt-queue.d.ts +18 -0
- package/dist/src/tui/prompt-queue.js +27 -0
- package/dist/src/tui/prompt-queue.js.map +1 -0
- package/dist/src/tui/resize.d.ts +7 -0
- package/dist/src/tui/resize.js +15 -0
- package/dist/src/tui/resize.js.map +1 -0
- package/dist/src/tui/session-picker.d.ts +10 -0
- package/dist/src/tui/session-picker.js +17 -0
- package/dist/src/tui/session-picker.js.map +1 -0
- package/dist/src/tui/session-transcript.d.ts +2 -0
- package/dist/src/tui/session-transcript.js +44 -0
- package/dist/src/tui/session-transcript.js.map +1 -0
- package/dist/src/tui/slash-notice.d.ts +2 -0
- package/dist/src/tui/slash-notice.js +9 -0
- package/dist/src/tui/slash-notice.js.map +1 -0
- package/dist/src/tui/slash.d.ts +21 -0
- package/dist/src/tui/slash.js +103 -0
- package/dist/src/tui/slash.js.map +1 -0
- package/dist/src/tui/splash.d.ts +4 -0
- package/dist/src/tui/splash.js +64 -0
- package/dist/src/tui/splash.js.map +1 -0
- package/dist/src/tui/tool-renderer.d.ts +6 -0
- package/dist/src/tui/tool-renderer.js +1024 -0
- package/dist/src/tui/tool-renderer.js.map +1 -0
- package/dist/src/tui/transcript-spacing.d.ts +1 -0
- package/dist/src/tui/transcript-spacing.js +4 -0
- package/dist/src/tui/transcript-spacing.js.map +1 -0
- package/dist/src/types.d.ts +220 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/util/abort.d.ts +3 -0
- package/dist/src/util/abort.js +19 -0
- package/dist/src/util/abort.js.map +1 -0
- package/dist/src/util/clock.d.ts +2 -0
- package/dist/src/util/clock.js +7 -0
- package/dist/src/util/clock.js.map +1 -0
- package/dist/src/util/fs.d.ts +13 -0
- package/dist/src/util/fs.js +75 -0
- package/dist/src/util/fs.js.map +1 -0
- package/dist/src/util/hash.d.ts +6 -0
- package/dist/src/util/hash.js +50 -0
- package/dist/src/util/hash.js.map +1 -0
- package/dist/src/util/limit.d.ts +11 -0
- package/dist/src/util/limit.js +29 -0
- package/dist/src/util/limit.js.map +1 -0
- package/dist/src/util/types.d.ts +22 -0
- package/dist/src/util/types.js +33 -0
- package/dist/src/util/types.js.map +1 -0
- package/dist/src/validation/acceptance.d.ts +12 -0
- package/dist/src/validation/acceptance.js +251 -0
- package/dist/src/validation/acceptance.js.map +1 -0
- package/dist/src/validation/milestone.d.ts +2 -0
- package/dist/src/validation/milestone.js +141 -0
- package/dist/src/validation/milestone.js.map +1 -0
- package/docs/final-acceptance-task.md +193 -0
- package/docs/public-source-hygiene.md +21 -0
- package/docs/roadmap.md +265 -0
- package/docs/tui-product-design.md +270 -0
- package/package.json +67 -0
- package/skills/coding-workflow/SKILL.md +16 -0
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { DatabaseSync } from "node:sqlite";
|
|
3
|
+
import { nowIso } from "../util/clock.js";
|
|
4
|
+
import { ensureDir, homeStateDir } from "../util/fs.js";
|
|
5
|
+
import { randomId } from "../util/hash.js";
|
|
6
|
+
function parseJsonObject(value) {
|
|
7
|
+
if (!value) {
|
|
8
|
+
return {};
|
|
9
|
+
}
|
|
10
|
+
return JSON.parse(value);
|
|
11
|
+
}
|
|
12
|
+
function parsePromptEpoch(row) {
|
|
13
|
+
return {
|
|
14
|
+
prompt_epoch_id: String(row.prompt_epoch_id),
|
|
15
|
+
session_id: String(row.session_id),
|
|
16
|
+
provider_id: String(row.provider_id),
|
|
17
|
+
model_id: String(row.model_id),
|
|
18
|
+
cache_salt: String(row.cache_salt),
|
|
19
|
+
prompt_layout_hash: String(row.prompt_layout_hash),
|
|
20
|
+
tool_schema_hash: String(row.tool_schema_hash),
|
|
21
|
+
section_hashes: JSON.parse(String(row.section_hashes_json)),
|
|
22
|
+
reason: String(row.reason),
|
|
23
|
+
created_at: String(row.created_at),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function parseResource(row) {
|
|
27
|
+
return {
|
|
28
|
+
uri: row.uri,
|
|
29
|
+
session_id: row.session_id,
|
|
30
|
+
kind: row.kind,
|
|
31
|
+
metadata: parseJsonObject(row.metadata_json),
|
|
32
|
+
content: row.content,
|
|
33
|
+
created_at: row.created_at,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function cacheHitRate(promptTokens, cachedPromptTokens) {
|
|
37
|
+
if (promptTokens === undefined || cachedPromptTokens === undefined || promptTokens <= 0) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
return Math.max(0, Math.min(1, cachedPromptTokens / promptTokens));
|
|
41
|
+
}
|
|
42
|
+
export class SessionStore {
|
|
43
|
+
dbPath;
|
|
44
|
+
db;
|
|
45
|
+
constructor(dbPath) {
|
|
46
|
+
this.dbPath = dbPath;
|
|
47
|
+
this.db = new DatabaseSync(dbPath);
|
|
48
|
+
this.migrate();
|
|
49
|
+
}
|
|
50
|
+
static async open(stateDir) {
|
|
51
|
+
const dir = stateDir ?? process.env.INFEROA_STATE_DIR ?? homeStateDir();
|
|
52
|
+
await ensureDir(dir);
|
|
53
|
+
return new SessionStore(path.join(dir, "state.sqlite"));
|
|
54
|
+
}
|
|
55
|
+
close() {
|
|
56
|
+
this.db.close();
|
|
57
|
+
}
|
|
58
|
+
migrate() {
|
|
59
|
+
this.db.exec(`
|
|
60
|
+
PRAGMA journal_mode = WAL;
|
|
61
|
+
PRAGMA foreign_keys = ON;
|
|
62
|
+
PRAGMA busy_timeout = 5000;
|
|
63
|
+
|
|
64
|
+
CREATE TABLE IF NOT EXISTS workspaces (
|
|
65
|
+
workspace_id TEXT PRIMARY KEY,
|
|
66
|
+
root TEXT NOT NULL UNIQUE,
|
|
67
|
+
alias TEXT NOT NULL,
|
|
68
|
+
created_at TEXT NOT NULL
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
72
|
+
session_id TEXT PRIMARY KEY,
|
|
73
|
+
workspace_id TEXT NOT NULL,
|
|
74
|
+
title TEXT NOT NULL,
|
|
75
|
+
status TEXT NOT NULL,
|
|
76
|
+
current_epoch_id TEXT,
|
|
77
|
+
created_at TEXT NOT NULL,
|
|
78
|
+
updated_at TEXT NOT NULL,
|
|
79
|
+
FOREIGN KEY(workspace_id) REFERENCES workspaces(workspace_id)
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
83
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
84
|
+
session_id TEXT NOT NULL,
|
|
85
|
+
run_id TEXT,
|
|
86
|
+
type TEXT NOT NULL,
|
|
87
|
+
data_json TEXT NOT NULL,
|
|
88
|
+
created_at TEXT NOT NULL,
|
|
89
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_id ON events(session_id, id);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_events_type ON events(type);
|
|
94
|
+
|
|
95
|
+
CREATE TABLE IF NOT EXISTS locks (
|
|
96
|
+
session_id TEXT PRIMARY KEY,
|
|
97
|
+
owner_client_id TEXT NOT NULL,
|
|
98
|
+
owner_kind TEXT NOT NULL,
|
|
99
|
+
acquired_at TEXT NOT NULL,
|
|
100
|
+
heartbeat_at TEXT NOT NULL,
|
|
101
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
CREATE TABLE IF NOT EXISTS prompt_epochs (
|
|
105
|
+
prompt_epoch_id TEXT PRIMARY KEY,
|
|
106
|
+
session_id TEXT NOT NULL,
|
|
107
|
+
provider_id TEXT NOT NULL,
|
|
108
|
+
model_id TEXT NOT NULL,
|
|
109
|
+
cache_salt TEXT NOT NULL,
|
|
110
|
+
prompt_layout_hash TEXT NOT NULL,
|
|
111
|
+
tool_schema_hash TEXT NOT NULL,
|
|
112
|
+
section_hashes_json TEXT NOT NULL,
|
|
113
|
+
reason TEXT NOT NULL,
|
|
114
|
+
created_at TEXT NOT NULL,
|
|
115
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
CREATE TABLE IF NOT EXISTS resources (
|
|
119
|
+
uri TEXT PRIMARY KEY,
|
|
120
|
+
session_id TEXT NOT NULL,
|
|
121
|
+
kind TEXT NOT NULL,
|
|
122
|
+
metadata_json TEXT NOT NULL,
|
|
123
|
+
content TEXT NOT NULL,
|
|
124
|
+
created_at TEXT NOT NULL,
|
|
125
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
CREATE TABLE IF NOT EXISTS endpoint_evidence (
|
|
129
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
130
|
+
session_id TEXT NOT NULL,
|
|
131
|
+
run_id TEXT,
|
|
132
|
+
provider_id TEXT NOT NULL,
|
|
133
|
+
mode TEXT NOT NULL,
|
|
134
|
+
request_id TEXT,
|
|
135
|
+
response_id TEXT,
|
|
136
|
+
prompt_hash TEXT,
|
|
137
|
+
tool_schema_hash TEXT,
|
|
138
|
+
prompt_tokens INTEGER,
|
|
139
|
+
cached_prompt_tokens INTEGER,
|
|
140
|
+
model_id TEXT,
|
|
141
|
+
evidence_json TEXT NOT NULL,
|
|
142
|
+
created_at TEXT NOT NULL,
|
|
143
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
CREATE TABLE IF NOT EXISTS processes (
|
|
147
|
+
session_id TEXT NOT NULL,
|
|
148
|
+
process_id TEXT NOT NULL,
|
|
149
|
+
pid INTEGER,
|
|
150
|
+
command TEXT NOT NULL,
|
|
151
|
+
cwd TEXT NOT NULL,
|
|
152
|
+
status TEXT NOT NULL,
|
|
153
|
+
exit_code INTEGER,
|
|
154
|
+
started_at TEXT NOT NULL,
|
|
155
|
+
updated_at TEXT NOT NULL,
|
|
156
|
+
PRIMARY KEY(session_id, process_id),
|
|
157
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
CREATE TABLE IF NOT EXISTS process_output (
|
|
161
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
162
|
+
session_id TEXT NOT NULL,
|
|
163
|
+
process_id TEXT NOT NULL,
|
|
164
|
+
seq INTEGER NOT NULL,
|
|
165
|
+
stream TEXT NOT NULL,
|
|
166
|
+
chunk TEXT NOT NULL,
|
|
167
|
+
created_at TEXT NOT NULL,
|
|
168
|
+
FOREIGN KEY(session_id, process_id) REFERENCES processes(session_id, process_id)
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
CREATE TABLE IF NOT EXISTS supervisor_jobs (
|
|
172
|
+
job_id TEXT PRIMARY KEY,
|
|
173
|
+
session_id TEXT NOT NULL,
|
|
174
|
+
workspace_root TEXT NOT NULL,
|
|
175
|
+
prompt TEXT NOT NULL,
|
|
176
|
+
status TEXT NOT NULL,
|
|
177
|
+
run_id TEXT,
|
|
178
|
+
created_at TEXT NOT NULL,
|
|
179
|
+
updated_at TEXT NOT NULL,
|
|
180
|
+
FOREIGN KEY(session_id) REFERENCES sessions(session_id)
|
|
181
|
+
);
|
|
182
|
+
`);
|
|
183
|
+
}
|
|
184
|
+
upsertWorkspace(workspace) {
|
|
185
|
+
const now = nowIso();
|
|
186
|
+
this.db
|
|
187
|
+
.prepare(`INSERT INTO workspaces(workspace_id, root, alias, created_at)
|
|
188
|
+
VALUES (?, ?, ?, ?)
|
|
189
|
+
ON CONFLICT(workspace_id) DO UPDATE SET root = excluded.root, alias = excluded.alias`)
|
|
190
|
+
.run(workspace.id, workspace.root, workspace.alias, now);
|
|
191
|
+
}
|
|
192
|
+
createSession(workspace, title) {
|
|
193
|
+
this.upsertWorkspace(workspace);
|
|
194
|
+
const now = nowIso();
|
|
195
|
+
const session = {
|
|
196
|
+
session_id: randomId("s"),
|
|
197
|
+
workspace_id: workspace.id,
|
|
198
|
+
title: title ?? "New session",
|
|
199
|
+
status: "created",
|
|
200
|
+
created_at: now,
|
|
201
|
+
updated_at: now,
|
|
202
|
+
};
|
|
203
|
+
this.db
|
|
204
|
+
.prepare(`INSERT INTO sessions(session_id, workspace_id, title, status, current_epoch_id, created_at, updated_at)
|
|
205
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
206
|
+
.run(session.session_id, session.workspace_id, session.title, session.status, null, now, now);
|
|
207
|
+
this.appendEvent({
|
|
208
|
+
session_id: session.session_id,
|
|
209
|
+
type: "session.created",
|
|
210
|
+
data: {
|
|
211
|
+
workspace_alias: workspace.alias,
|
|
212
|
+
workspace_root: workspace.root,
|
|
213
|
+
title: session.title,
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
return session;
|
|
217
|
+
}
|
|
218
|
+
getSession(sessionId) {
|
|
219
|
+
const row = this.db.prepare("SELECT * FROM sessions WHERE session_id = ?").get(sessionId);
|
|
220
|
+
return row ? { ...row } : undefined;
|
|
221
|
+
}
|
|
222
|
+
findSessionByPrefix(workspaceId, prefix) {
|
|
223
|
+
const rows = this.db
|
|
224
|
+
.prepare("SELECT * FROM sessions WHERE workspace_id = ? AND session_id LIKE ? ORDER BY updated_at DESC")
|
|
225
|
+
.all(workspaceId, `${prefix}%`);
|
|
226
|
+
if (rows.length > 1) {
|
|
227
|
+
throw new Error(`Session prefix is ambiguous: ${prefix}`);
|
|
228
|
+
}
|
|
229
|
+
return rows[0] ? { ...rows[0] } : undefined;
|
|
230
|
+
}
|
|
231
|
+
listSessions(workspaceId, options = {}) {
|
|
232
|
+
const rows = options.includeArchived
|
|
233
|
+
? this.db.prepare("SELECT * FROM sessions WHERE workspace_id = ? ORDER BY updated_at DESC").all(workspaceId)
|
|
234
|
+
: this.db
|
|
235
|
+
.prepare("SELECT * FROM sessions WHERE workspace_id = ? AND status != 'archived' ORDER BY updated_at DESC")
|
|
236
|
+
.all(workspaceId);
|
|
237
|
+
return rows.map((row) => ({ ...row }));
|
|
238
|
+
}
|
|
239
|
+
updateSession(sessionId, changes) {
|
|
240
|
+
const current = this.getSession(sessionId);
|
|
241
|
+
if (!current) {
|
|
242
|
+
throw new Error(`Unknown session: ${sessionId}`);
|
|
243
|
+
}
|
|
244
|
+
const title = changes.title ?? current.title;
|
|
245
|
+
const status = changes.status ?? current.status;
|
|
246
|
+
const epoch = changes.current_epoch_id === undefined ? (current.current_epoch_id ?? null) : changes.current_epoch_id;
|
|
247
|
+
const now = nowIso();
|
|
248
|
+
this.db
|
|
249
|
+
.prepare("UPDATE sessions SET title = ?, status = ?, current_epoch_id = ?, updated_at = ? WHERE session_id = ?")
|
|
250
|
+
.run(title, status, epoch, now, sessionId);
|
|
251
|
+
}
|
|
252
|
+
renameSession(sessionId, title) {
|
|
253
|
+
const trimmed = title.trim().replace(/\s+/g, " ").slice(0, 120);
|
|
254
|
+
if (!trimmed) {
|
|
255
|
+
throw new Error("Session title must not be empty");
|
|
256
|
+
}
|
|
257
|
+
const previous = this.getSession(sessionId);
|
|
258
|
+
if (!previous) {
|
|
259
|
+
throw new Error(`Unknown session: ${sessionId}`);
|
|
260
|
+
}
|
|
261
|
+
this.appendEvent({
|
|
262
|
+
session_id: sessionId,
|
|
263
|
+
type: "session.renamed",
|
|
264
|
+
data: { title: trimmed },
|
|
265
|
+
});
|
|
266
|
+
this.updateSession(sessionId, { title: trimmed, status: previous.status });
|
|
267
|
+
return this.getSession(sessionId);
|
|
268
|
+
}
|
|
269
|
+
archiveSession(sessionId) {
|
|
270
|
+
this.updateSession(sessionId, { status: "archived" });
|
|
271
|
+
this.appendEvent({
|
|
272
|
+
session_id: sessionId,
|
|
273
|
+
type: "session.archived",
|
|
274
|
+
data: {},
|
|
275
|
+
});
|
|
276
|
+
return this.getSession(sessionId);
|
|
277
|
+
}
|
|
278
|
+
appendEvent(event) {
|
|
279
|
+
const createdAt = event.created_at ?? nowIso();
|
|
280
|
+
const result = this.db
|
|
281
|
+
.prepare("INSERT INTO events(session_id, run_id, type, data_json, created_at) VALUES (?, ?, ?, ?, ?)")
|
|
282
|
+
.run(event.session_id, event.run_id ?? null, event.type, JSON.stringify(event.data), createdAt);
|
|
283
|
+
const status = this.eventStatus(event.type);
|
|
284
|
+
if (status) {
|
|
285
|
+
this.updateSession(event.session_id, { status });
|
|
286
|
+
}
|
|
287
|
+
return Number(result.lastInsertRowid);
|
|
288
|
+
}
|
|
289
|
+
eventStatus(type) {
|
|
290
|
+
if (type === "session.locked" || type === "session.unlocked" || type === "session.renamed" || type === "resource.created")
|
|
291
|
+
return undefined;
|
|
292
|
+
if (type.includes("permission.requested"))
|
|
293
|
+
return "waiting_permission";
|
|
294
|
+
if (type === "tool.call" || type === "tool.execution.started" || type === "tool.progress")
|
|
295
|
+
return "running_tool";
|
|
296
|
+
if (type === "tool.result" || type === "tool.success" || type === "tool.failure" || type === "tool.abort")
|
|
297
|
+
return "idle";
|
|
298
|
+
if (type.includes("compaction"))
|
|
299
|
+
return "compacting";
|
|
300
|
+
if (type.includes("resumed"))
|
|
301
|
+
return "resumed";
|
|
302
|
+
if (type.includes("archived"))
|
|
303
|
+
return "archived";
|
|
304
|
+
if (type === "run.completed")
|
|
305
|
+
return "idle";
|
|
306
|
+
if (type === "run.stopped")
|
|
307
|
+
return "stopped";
|
|
308
|
+
if (type === "run.failed")
|
|
309
|
+
return "failed";
|
|
310
|
+
if (type.includes("model.response.settled"))
|
|
311
|
+
return "idle";
|
|
312
|
+
return "active";
|
|
313
|
+
}
|
|
314
|
+
listEvents(sessionId, limit) {
|
|
315
|
+
const sql = limit === undefined
|
|
316
|
+
? "SELECT * FROM events WHERE session_id = ? ORDER BY id ASC"
|
|
317
|
+
: "SELECT * FROM events WHERE session_id = ? ORDER BY id DESC LIMIT ?";
|
|
318
|
+
const rows = (limit === undefined
|
|
319
|
+
? this.db.prepare(sql).all(sessionId)
|
|
320
|
+
: this.db.prepare(sql).all(sessionId, limit));
|
|
321
|
+
const ordered = limit === undefined ? rows : rows.reverse();
|
|
322
|
+
return ordered.map((row) => ({
|
|
323
|
+
id: Number(row.id),
|
|
324
|
+
session_id: String(row.session_id),
|
|
325
|
+
run_id: row.run_id ? String(row.run_id) : undefined,
|
|
326
|
+
type: String(row.type),
|
|
327
|
+
data: parseJsonObject(String(row.data_json)),
|
|
328
|
+
created_at: String(row.created_at),
|
|
329
|
+
}));
|
|
330
|
+
}
|
|
331
|
+
acquireLock(sessionId, ownerClientId, ownerKind, staleMs = 60_000) {
|
|
332
|
+
const now = nowIso();
|
|
333
|
+
const existing = this.db.prepare("SELECT * FROM locks WHERE session_id = ?").get(sessionId);
|
|
334
|
+
if (existing) {
|
|
335
|
+
const age = Date.now() - Date.parse(existing.heartbeat_at);
|
|
336
|
+
if (age < staleMs && existing.owner_client_id !== ownerClientId) {
|
|
337
|
+
throw new Error(`Session is locked by ${existing.owner_kind}:${existing.owner_client_id}`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
this.db
|
|
341
|
+
.prepare(`INSERT INTO locks(session_id, owner_client_id, owner_kind, acquired_at, heartbeat_at)
|
|
342
|
+
VALUES (?, ?, ?, ?, ?)
|
|
343
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
344
|
+
owner_client_id = excluded.owner_client_id,
|
|
345
|
+
owner_kind = excluded.owner_kind,
|
|
346
|
+
acquired_at = excluded.acquired_at,
|
|
347
|
+
heartbeat_at = excluded.heartbeat_at`)
|
|
348
|
+
.run(sessionId, ownerClientId, ownerKind, now, now);
|
|
349
|
+
this.appendEvent({
|
|
350
|
+
session_id: sessionId,
|
|
351
|
+
type: "session.locked",
|
|
352
|
+
data: { owner_client_id: ownerClientId, owner_kind: ownerKind },
|
|
353
|
+
});
|
|
354
|
+
return { session_id: sessionId, owner_client_id: ownerClientId, owner_kind: ownerKind, acquired_at: now, heartbeat_at: now };
|
|
355
|
+
}
|
|
356
|
+
heartbeatLock(sessionId, ownerClientId) {
|
|
357
|
+
this.db
|
|
358
|
+
.prepare("UPDATE locks SET heartbeat_at = ? WHERE session_id = ? AND owner_client_id = ?")
|
|
359
|
+
.run(nowIso(), sessionId, ownerClientId);
|
|
360
|
+
}
|
|
361
|
+
releaseLock(sessionId, ownerClientId) {
|
|
362
|
+
this.db.prepare("DELETE FROM locks WHERE session_id = ? AND owner_client_id = ?").run(sessionId, ownerClientId);
|
|
363
|
+
this.appendEvent({
|
|
364
|
+
session_id: sessionId,
|
|
365
|
+
type: "session.unlocked",
|
|
366
|
+
data: { owner_client_id: ownerClientId },
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
getLock(sessionId) {
|
|
370
|
+
return this.db.prepare("SELECT * FROM locks WHERE session_id = ?").get(sessionId);
|
|
371
|
+
}
|
|
372
|
+
clearStaleLocks(staleMs = 60_000) {
|
|
373
|
+
const locks = this.db.prepare("SELECT * FROM locks").all();
|
|
374
|
+
let cleared = 0;
|
|
375
|
+
for (const lock of locks) {
|
|
376
|
+
const age = Date.now() - Date.parse(lock.heartbeat_at);
|
|
377
|
+
if (age < staleMs) {
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
const latestRunId = this.latestOpenRunId(lock.session_id);
|
|
381
|
+
if (latestRunId) {
|
|
382
|
+
this.appendEvent({
|
|
383
|
+
session_id: lock.session_id,
|
|
384
|
+
run_id: latestRunId,
|
|
385
|
+
type: "run.stopped",
|
|
386
|
+
data: { reason: "stale_lock", owner_client_id: lock.owner_client_id, owner_kind: lock.owner_kind, heartbeat_at: lock.heartbeat_at },
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
this.db.prepare("DELETE FROM locks WHERE session_id = ? AND owner_client_id = ?").run(lock.session_id, lock.owner_client_id);
|
|
390
|
+
this.appendEvent({
|
|
391
|
+
session_id: lock.session_id,
|
|
392
|
+
type: "session.unlocked",
|
|
393
|
+
data: { owner_client_id: lock.owner_client_id, owner_kind: lock.owner_kind, reason: "stale_lock", heartbeat_at: lock.heartbeat_at },
|
|
394
|
+
});
|
|
395
|
+
cleared += 1;
|
|
396
|
+
}
|
|
397
|
+
return cleared;
|
|
398
|
+
}
|
|
399
|
+
latestOpenRunId(sessionId) {
|
|
400
|
+
const row = this.db
|
|
401
|
+
.prepare("SELECT run_id FROM events WHERE session_id = ? AND run_id IS NOT NULL ORDER BY id DESC LIMIT 1")
|
|
402
|
+
.get(sessionId);
|
|
403
|
+
const runId = row?.run_id;
|
|
404
|
+
if (!runId) {
|
|
405
|
+
return undefined;
|
|
406
|
+
}
|
|
407
|
+
const terminal = this.db
|
|
408
|
+
.prepare("SELECT 1 FROM events WHERE session_id = ? AND run_id = ? AND type IN ('run.completed', 'run.stopped', 'run.failed') LIMIT 1")
|
|
409
|
+
.get(sessionId, runId);
|
|
410
|
+
return terminal ? undefined : runId;
|
|
411
|
+
}
|
|
412
|
+
insertPromptEpoch(record) {
|
|
413
|
+
const createdAt = record.created_at ?? nowIso();
|
|
414
|
+
this.db
|
|
415
|
+
.prepare(`INSERT INTO prompt_epochs(
|
|
416
|
+
prompt_epoch_id, session_id, provider_id, model_id, cache_salt,
|
|
417
|
+
prompt_layout_hash, tool_schema_hash, section_hashes_json, reason, created_at
|
|
418
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
419
|
+
.run(record.prompt_epoch_id, record.session_id, record.provider_id, record.model_id, record.cache_salt, record.prompt_layout_hash, record.tool_schema_hash, JSON.stringify(record.section_hashes), record.reason, createdAt);
|
|
420
|
+
this.updateSession(record.session_id, { current_epoch_id: record.prompt_epoch_id });
|
|
421
|
+
this.appendEvent({
|
|
422
|
+
session_id: record.session_id,
|
|
423
|
+
type: "prompt.epoch.created",
|
|
424
|
+
data: {
|
|
425
|
+
prompt_epoch_id: record.prompt_epoch_id,
|
|
426
|
+
provider_id: record.provider_id,
|
|
427
|
+
model_id: record.model_id,
|
|
428
|
+
cache_salt: record.cache_salt,
|
|
429
|
+
prompt_layout_hash: record.prompt_layout_hash,
|
|
430
|
+
tool_schema_hash: record.tool_schema_hash,
|
|
431
|
+
section_hashes: record.section_hashes,
|
|
432
|
+
reason: record.reason,
|
|
433
|
+
},
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
getCurrentPromptEpoch(sessionId) {
|
|
437
|
+
const session = this.getSession(sessionId);
|
|
438
|
+
if (!session?.current_epoch_id) {
|
|
439
|
+
return undefined;
|
|
440
|
+
}
|
|
441
|
+
const row = this.db
|
|
442
|
+
.prepare("SELECT * FROM prompt_epochs WHERE prompt_epoch_id = ?")
|
|
443
|
+
.get(session.current_epoch_id);
|
|
444
|
+
return row ? parsePromptEpoch(row) : undefined;
|
|
445
|
+
}
|
|
446
|
+
putResource(sessionId, kind, content, metadata = {}) {
|
|
447
|
+
const uri = `resource://${sessionId}/${randomId("r")}`;
|
|
448
|
+
const createdAt = nowIso();
|
|
449
|
+
this.db
|
|
450
|
+
.prepare("INSERT INTO resources(uri, session_id, kind, metadata_json, content, created_at) VALUES (?, ?, ?, ?, ?, ?)")
|
|
451
|
+
.run(uri, sessionId, kind, JSON.stringify(metadata), content, createdAt);
|
|
452
|
+
this.appendEvent({
|
|
453
|
+
session_id: sessionId,
|
|
454
|
+
type: "resource.created",
|
|
455
|
+
data: { uri, kind, metadata, bytes: Buffer.byteLength(content) },
|
|
456
|
+
});
|
|
457
|
+
return { uri, session_id: sessionId, kind, metadata, content, created_at: createdAt };
|
|
458
|
+
}
|
|
459
|
+
readResource(uri) {
|
|
460
|
+
const row = this.db.prepare("SELECT * FROM resources WHERE uri = ?").get(uri);
|
|
461
|
+
return row ? parseResource(row) : undefined;
|
|
462
|
+
}
|
|
463
|
+
listResources(sessionId, limit = 50) {
|
|
464
|
+
const safeLimit = Math.max(1, Math.min(Math.trunc(limit), 200));
|
|
465
|
+
const rows = this.db
|
|
466
|
+
.prepare("SELECT * FROM resources WHERE session_id = ? ORDER BY created_at DESC LIMIT ?")
|
|
467
|
+
.all(sessionId, safeLimit);
|
|
468
|
+
return rows.map(parseResource);
|
|
469
|
+
}
|
|
470
|
+
recordEndpointEvidence(sessionId, runId, providerId, snapshot, promptHash, toolSchemaHash) {
|
|
471
|
+
const evidence = {
|
|
472
|
+
...snapshot,
|
|
473
|
+
prompt_hash: snapshot.prompt_hash ?? promptHash,
|
|
474
|
+
tool_schema_hash: snapshot.tool_schema_hash ?? toolSchemaHash,
|
|
475
|
+
cache_hit_rate: snapshot.cache_hit_rate ?? cacheHitRate(snapshot.usage?.prompt_tokens, snapshot.usage?.cached_prompt_tokens),
|
|
476
|
+
};
|
|
477
|
+
this.db
|
|
478
|
+
.prepare(`INSERT INTO endpoint_evidence(
|
|
479
|
+
session_id, run_id, provider_id, mode, request_id, response_id, prompt_hash,
|
|
480
|
+
tool_schema_hash, prompt_tokens, cached_prompt_tokens, model_id, evidence_json, created_at
|
|
481
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
482
|
+
.run(sessionId, runId ?? null, providerId, evidence.mode, evidence.request_id ?? null, evidence.response_id ?? null, promptHash ?? null, toolSchemaHash ?? null, evidence.usage?.prompt_tokens ?? null, evidence.usage?.cached_prompt_tokens ?? null, evidence.model ?? null, JSON.stringify(evidence), nowIso());
|
|
483
|
+
this.appendEvent({
|
|
484
|
+
session_id: sessionId,
|
|
485
|
+
run_id: runId,
|
|
486
|
+
type: "endpoint.evidence.recorded",
|
|
487
|
+
data: {
|
|
488
|
+
provider_id: providerId,
|
|
489
|
+
mode: evidence.mode,
|
|
490
|
+
request_id: evidence.request_id,
|
|
491
|
+
response_id: evidence.response_id,
|
|
492
|
+
request_class: evidence.request_class,
|
|
493
|
+
prompt_hash: evidence.prompt_hash,
|
|
494
|
+
tool_schema_hash: evidence.tool_schema_hash,
|
|
495
|
+
prompt_epoch_id: evidence.prompt_epoch_id,
|
|
496
|
+
prompt_tokens: evidence.usage?.prompt_tokens,
|
|
497
|
+
cached_prompt_tokens: evidence.usage?.cached_prompt_tokens,
|
|
498
|
+
cache_hit_rate: evidence.cache_hit_rate,
|
|
499
|
+
model: evidence.model,
|
|
500
|
+
},
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
listEndpointEvidence(sessionId) {
|
|
504
|
+
return this.db
|
|
505
|
+
.prepare("SELECT run_id, evidence_json, created_at FROM endpoint_evidence WHERE session_id = ? ORDER BY id ASC")
|
|
506
|
+
.all(sessionId).map((row) => ({
|
|
507
|
+
...parseJsonObject(row.evidence_json),
|
|
508
|
+
run_id: row.run_id ?? undefined,
|
|
509
|
+
created_at: row.created_at,
|
|
510
|
+
}));
|
|
511
|
+
}
|
|
512
|
+
upsertProcess(record) {
|
|
513
|
+
const now = nowIso();
|
|
514
|
+
this.db
|
|
515
|
+
.prepare(`INSERT INTO processes(session_id, process_id, pid, command, cwd, status, exit_code, started_at, updated_at)
|
|
516
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
517
|
+
ON CONFLICT(session_id, process_id) DO UPDATE SET
|
|
518
|
+
pid = excluded.pid,
|
|
519
|
+
status = excluded.status,
|
|
520
|
+
exit_code = excluded.exit_code,
|
|
521
|
+
updated_at = excluded.updated_at`)
|
|
522
|
+
.run(record.session_id, record.process_id, record.pid ?? null, record.command, record.cwd, record.status, record.exit_code ?? null, now, now);
|
|
523
|
+
}
|
|
524
|
+
appendProcessOutput(sessionId, processId, stream, chunk) {
|
|
525
|
+
const last = this.db
|
|
526
|
+
.prepare("SELECT MAX(seq) AS seq FROM process_output WHERE session_id = ? AND process_id = ?")
|
|
527
|
+
.get(sessionId, processId);
|
|
528
|
+
const seq = Number(last?.seq ?? 0) + 1;
|
|
529
|
+
this.db
|
|
530
|
+
.prepare("INSERT INTO process_output(session_id, process_id, seq, stream, chunk, created_at) VALUES (?, ?, ?, ?, ?, ?)")
|
|
531
|
+
.run(sessionId, processId, seq, stream, chunk, nowIso());
|
|
532
|
+
return seq;
|
|
533
|
+
}
|
|
534
|
+
readProcessOutput(sessionId, processId, sinceSeq = 0, maxBytes = 24_000) {
|
|
535
|
+
const rows = this.db
|
|
536
|
+
.prepare("SELECT seq, stream, chunk FROM process_output WHERE session_id = ? AND process_id = ? AND seq > ? ORDER BY seq ASC")
|
|
537
|
+
.all(sessionId, processId, sinceSeq);
|
|
538
|
+
let text = "";
|
|
539
|
+
let seq = sinceSeq;
|
|
540
|
+
for (const row of rows) {
|
|
541
|
+
const next = `${row.stream}: ${row.chunk}`;
|
|
542
|
+
if (Buffer.byteLength(text + next) > maxBytes) {
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
text += next;
|
|
546
|
+
seq = row.seq;
|
|
547
|
+
}
|
|
548
|
+
return { seq, text };
|
|
549
|
+
}
|
|
550
|
+
createSupervisorJob(sessionId, workspaceRoot, prompt) {
|
|
551
|
+
const now = nowIso();
|
|
552
|
+
const job = {
|
|
553
|
+
job_id: randomId("j"),
|
|
554
|
+
session_id: sessionId,
|
|
555
|
+
workspace_root: workspaceRoot,
|
|
556
|
+
prompt,
|
|
557
|
+
status: "queued",
|
|
558
|
+
created_at: now,
|
|
559
|
+
updated_at: now,
|
|
560
|
+
};
|
|
561
|
+
this.db
|
|
562
|
+
.prepare("INSERT INTO supervisor_jobs(job_id, session_id, workspace_root, prompt, status, run_id, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)")
|
|
563
|
+
.run(job.job_id, job.session_id, job.workspace_root, job.prompt, job.status, null, now, now);
|
|
564
|
+
this.appendEvent({
|
|
565
|
+
session_id: sessionId,
|
|
566
|
+
type: "daemon.job.queued",
|
|
567
|
+
data: { job_id: job.job_id, prompt },
|
|
568
|
+
});
|
|
569
|
+
return job;
|
|
570
|
+
}
|
|
571
|
+
updateSupervisorJob(jobId, changes) {
|
|
572
|
+
const current = this.getSupervisorJob(jobId);
|
|
573
|
+
if (!current) {
|
|
574
|
+
throw new Error(`Unknown supervisor job: ${jobId}`);
|
|
575
|
+
}
|
|
576
|
+
this.db
|
|
577
|
+
.prepare("UPDATE supervisor_jobs SET status = ?, run_id = ?, updated_at = ? WHERE job_id = ?")
|
|
578
|
+
.run(changes.status ?? current.status, changes.run_id ?? current.run_id ?? null, nowIso(), jobId);
|
|
579
|
+
}
|
|
580
|
+
getSupervisorJob(jobId) {
|
|
581
|
+
const row = this.db.prepare("SELECT * FROM supervisor_jobs WHERE job_id = ?").get(jobId);
|
|
582
|
+
return row ? { ...row } : undefined;
|
|
583
|
+
}
|
|
584
|
+
listSupervisorJobs(status) {
|
|
585
|
+
const rows = status
|
|
586
|
+
? this.db
|
|
587
|
+
.prepare("SELECT * FROM supervisor_jobs WHERE status = ? ORDER BY updated_at DESC")
|
|
588
|
+
.all(status)
|
|
589
|
+
: this.db.prepare("SELECT * FROM supervisor_jobs ORDER BY updated_at DESC").all();
|
|
590
|
+
return rows.map((row) => ({ ...row }));
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/session/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { base32UrlSha256 } from "../util/hash.js";
|
|
3
|
+
import { findGitRoot, realpathOrResolve } from "../util/fs.js";
|
|
4
|
+
export async function resolveWorkspace(cwd, config, explicit) {
|
|
5
|
+
const raw = explicit ?? config.workspace?.root ?? (await findGitRoot(cwd)) ?? cwd;
|
|
6
|
+
const root = await realpathOrResolve(path.resolve(cwd, raw));
|
|
7
|
+
const digest = base32UrlSha256(`inferoa:workspace:v1\0${root}`, 20);
|
|
8
|
+
return {
|
|
9
|
+
root,
|
|
10
|
+
id: `w_${digest}`,
|
|
11
|
+
alias: path.basename(root) || root,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/session/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAuB,EAAE,QAAiB;IAC5F,MAAM,GAAG,GAAG,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,eAAe,CAAC,yBAAyB,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO;QACL,IAAI;QACJ,EAAE,EAAE,KAAK,MAAM,EAAE;QACjB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { VllmAgentConfig, WorkspaceIdentity } from "../types.js";
|
|
2
|
+
export interface SkillDescriptor {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
source: string;
|
|
7
|
+
path?: string;
|
|
8
|
+
trust: "package" | "user" | "workspace" | "imported";
|
|
9
|
+
required_tools: string[];
|
|
10
|
+
activation: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface Skill extends SkillDescriptor {
|
|
13
|
+
body: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class SkillRegistry {
|
|
16
|
+
private readonly workspace;
|
|
17
|
+
private readonly config;
|
|
18
|
+
constructor(workspace: WorkspaceIdentity, config: VllmAgentConfig);
|
|
19
|
+
discover(): Promise<SkillDescriptor[]>;
|
|
20
|
+
loadEnabled(descriptors?: SkillDescriptor[]): Promise<Skill[]>;
|
|
21
|
+
private discoveryRoots;
|
|
22
|
+
private discoverNative;
|
|
23
|
+
private discoverImported;
|
|
24
|
+
}
|