@corenel/harness 0.2.0 → 0.3.2
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/acp/agentMap.d.ts +34 -0
- package/dist/acp/agentMap.d.ts.map +1 -0
- package/dist/acp/agentMap.js +110 -0
- package/dist/acp/agentMap.js.map +1 -0
- package/dist/acp/index.d.ts +4 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +6 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/policyMap.d.ts +55 -0
- package/dist/acp/policyMap.d.ts.map +1 -0
- package/dist/acp/policyMap.js +121 -0
- package/dist/acp/policyMap.js.map +1 -0
- package/dist/acp/types.d.ts +41 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +14 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/api/backend.d.ts +39 -0
- package/dist/api/backend.d.ts.map +1 -0
- package/dist/api/backend.js +126 -0
- package/dist/api/backend.js.map +1 -0
- package/dist/api/client.d.ts +95 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +212 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/fileMirrorSource.d.ts +24 -0
- package/dist/api/fileMirrorSource.d.ts.map +1 -0
- package/dist/api/fileMirrorSource.js +59 -0
- package/dist/api/fileMirrorSource.js.map +1 -0
- package/dist/api/mirror.d.ts +102 -0
- package/dist/api/mirror.d.ts.map +1 -0
- package/dist/api/mirror.js +204 -0
- package/dist/api/mirror.js.map +1 -0
- package/dist/api/mirrorScheduler.d.ts +56 -0
- package/dist/api/mirrorScheduler.d.ts.map +1 -0
- package/dist/api/mirrorScheduler.js +167 -0
- package/dist/api/mirrorScheduler.js.map +1 -0
- package/dist/core/loop.d.ts +2 -0
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +1 -0
- package/dist/core/loop.js.map +1 -1
- package/dist/install/lockfile.d.ts +79 -0
- package/dist/install/lockfile.d.ts.map +1 -0
- package/dist/install/lockfile.js +155 -0
- package/dist/install/lockfile.js.map +1 -0
- package/dist/install/store.d.ts +13 -0
- package/dist/install/store.d.ts.map +1 -0
- package/dist/install/store.js +38 -0
- package/dist/install/store.js.map +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +6 -1
- package/dist/log.js.map +1 -1
- package/dist/prompts/host.d.ts +4 -0
- package/dist/prompts/host.d.ts.map +1 -1
- package/dist/prompts/host.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +4 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/library/defaults.generated.js +1 -1
- package/dist/prompts/library/defaults.generated.js.map +1 -1
- package/dist/providers/gateway.d.ts +3 -0
- package/dist/providers/gateway.d.ts.map +1 -1
- package/dist/providers/gateway.js +3 -0
- package/dist/providers/gateway.js.map +1 -1
- package/dist/sessions/apiLeaseStore.d.ts +10 -0
- package/dist/sessions/apiLeaseStore.d.ts.map +1 -0
- package/dist/sessions/apiLeaseStore.js +41 -0
- package/dist/sessions/apiLeaseStore.js.map +1 -0
- package/dist/sessions/head.d.ts +90 -0
- package/dist/sessions/head.d.ts.map +1 -0
- package/dist/sessions/head.js +82 -0
- package/dist/sessions/head.js.map +1 -0
- package/dist/sessions/inflight.d.ts +58 -0
- package/dist/sessions/inflight.d.ts.map +1 -0
- package/dist/sessions/inflight.js +0 -0
- package/dist/sessions/inflight.js.map +1 -0
- package/dist/sessions/lease.d.ts +59 -0
- package/dist/sessions/lease.d.ts.map +1 -0
- package/dist/sessions/lease.js +115 -0
- package/dist/sessions/lease.js.map +1 -0
- package/dist/sessions/leaseStore.d.ts +46 -0
- package/dist/sessions/leaseStore.d.ts.map +1 -0
- package/dist/sessions/leaseStore.js +58 -0
- package/dist/sessions/leaseStore.js.map +1 -0
- package/dist/sessions/timeline.d.ts +134 -0
- package/dist/sessions/timeline.d.ts.map +1 -0
- package/dist/sessions/timeline.js +127 -0
- package/dist/sessions/timeline.js.map +1 -0
- package/dist/sidecar/host.d.ts +223 -3
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +592 -2
- package/dist/sidecar/host.js.map +1 -1
- package/dist/sidecar/server.d.ts +124 -2
- package/dist/sidecar/server.d.ts.map +1 -1
- package/dist/sidecar/server.js +608 -9
- package/dist/sidecar/server.js.map +1 -1
- package/dist/snapshot/effects.d.ts +69 -0
- package/dist/snapshot/effects.d.ts.map +1 -0
- package/dist/snapshot/effects.js +67 -0
- package/dist/snapshot/effects.js.map +1 -0
- package/dist/snapshot/manifest.d.ts +73 -0
- package/dist/snapshot/manifest.d.ts.map +1 -0
- package/dist/snapshot/manifest.js +141 -0
- package/dist/snapshot/manifest.js.map +1 -0
- package/dist/snapshot/tree.d.ts +62 -0
- package/dist/snapshot/tree.d.ts.map +1 -0
- package/dist/snapshot/tree.js +147 -0
- package/dist/snapshot/tree.js.map +1 -0
- package/dist/tools/builtins.d.ts.map +1 -1
- package/dist/tools/builtins.js +61 -2
- package/dist/tools/builtins.js.map +1 -1
- package/dist/tools/namespaces.d.ts +1 -1
- package/dist/tools/namespaces.d.ts.map +1 -1
- package/dist/tools/namespaces.js +24 -0
- package/dist/tools/namespaces.js.map +1 -1
- package/dist/tools/todo.d.ts.map +1 -1
- package/dist/tools/todo.js +12 -0
- package/dist/tools/todo.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/* The install lockfile — what makes "the same inputs produce the same agents".
|
|
2
|
+
*
|
|
3
|
+
* `prompd.json` records what a workspace ASKED for. That is a manifest, and it is
|
|
4
|
+
* not enough to reproduce an install: it does not pin the transitive closure, so
|
|
5
|
+
* two installs from the same manifest can differ the moment anything upstream
|
|
6
|
+
* publishes. The lockfile records what was actually RESOLVED — every package,
|
|
7
|
+
* exact version, and the files it wrote.
|
|
8
|
+
*
|
|
9
|
+
* Pure, and deliberately kernel-side: it has no dependency on @prompd/core (which
|
|
10
|
+
* the kernel may not import) and no filesystem of its own, so the same format
|
|
11
|
+
* serves the browser installer today and a session-scoped node installer later.
|
|
12
|
+
* The caller supplies what was installed; this owns the FORMAT and the
|
|
13
|
+
* reproducibility rules.
|
|
14
|
+
*
|
|
15
|
+
* The load-bearing property is CANONICAL SERIALIZATION: the same set of packages
|
|
16
|
+
* must serialize byte-for-byte identically regardless of the order they were
|
|
17
|
+
* installed in. Without that, a lockfile churns in version control on every
|
|
18
|
+
* install and stops being reviewable — which is most of why anyone keeps one.
|
|
19
|
+
*/
|
|
20
|
+
export const LOCKFILE_VERSION = 1;
|
|
21
|
+
/** Conventional location, alongside the manifest it pins. */
|
|
22
|
+
export const LOCKFILE_PATH = '.prompd/prompd-lock.json';
|
|
23
|
+
export function emptyLock() {
|
|
24
|
+
return { lockfileVersion: LOCKFILE_VERSION, packages: [] };
|
|
25
|
+
}
|
|
26
|
+
/** Identity of a locked package: name AND version. Two versions of the same
|
|
27
|
+
* package can legitimately coexist (core installs to a per-version directory), so
|
|
28
|
+
* keying on name alone would silently drop one. */
|
|
29
|
+
function keyOf(p) {
|
|
30
|
+
return `${p.name}@${p.version}`;
|
|
31
|
+
}
|
|
32
|
+
/** Order packages deterministically. Name first, then version, so a lockfile
|
|
33
|
+
* reads like an inventory and diffs line-by-line. */
|
|
34
|
+
function byIdentity(a, b) {
|
|
35
|
+
return a.name === b.name ? a.version.localeCompare(b.version) : a.name.localeCompare(b.name);
|
|
36
|
+
}
|
|
37
|
+
function normalize(p) {
|
|
38
|
+
return {
|
|
39
|
+
name: p.name,
|
|
40
|
+
version: p.version,
|
|
41
|
+
type: p.type,
|
|
42
|
+
...(p.files && p.files.length ? { files: [...p.files].sort() } : {}),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Add or replace entries, returning a NEW lockfile.
|
|
47
|
+
*
|
|
48
|
+
* Replacement is by name+version, so re-installing the same version updates its
|
|
49
|
+
* file list in place rather than duplicating it, while a genuinely new version
|
|
50
|
+
* is added alongside — matching how core installs to a per-version directory.
|
|
51
|
+
*/
|
|
52
|
+
export function withPackages(lock, added) {
|
|
53
|
+
const merged = new Map();
|
|
54
|
+
for (const p of lock.packages)
|
|
55
|
+
merged.set(keyOf(p), normalize(p));
|
|
56
|
+
for (const p of added)
|
|
57
|
+
merged.set(keyOf(p), normalize(p));
|
|
58
|
+
return { lockfileVersion: LOCKFILE_VERSION, packages: [...merged.values()].sort(byIdentity) };
|
|
59
|
+
}
|
|
60
|
+
/** Drop every version of a package by name — the uninstall counterpart. */
|
|
61
|
+
export function withoutPackage(lock, name) {
|
|
62
|
+
return {
|
|
63
|
+
lockfileVersion: LOCKFILE_VERSION,
|
|
64
|
+
packages: lock.packages.filter((p) => p.name !== name).map(normalize).sort(byIdentity),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Canonical text form. Key order is fixed by construction (the object literals in
|
|
69
|
+
* `normalize`), packages are sorted, and the file ends with a newline — so the
|
|
70
|
+
* same install set always produces the same bytes.
|
|
71
|
+
*/
|
|
72
|
+
export function serializeLock(lock) {
|
|
73
|
+
const canonical = {
|
|
74
|
+
lockfileVersion: LOCKFILE_VERSION,
|
|
75
|
+
packages: [...lock.packages].map(normalize).sort(byIdentity),
|
|
76
|
+
};
|
|
77
|
+
return JSON.stringify(canonical, null, 2) + '\n';
|
|
78
|
+
}
|
|
79
|
+
function isRecord(v) {
|
|
80
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Parse a lockfile, or null when the text is not one.
|
|
84
|
+
*
|
|
85
|
+
* Tolerant of unknown package TYPES (the registry may serve a kind this build
|
|
86
|
+
* predates, and dropping it would silently un-pin a dependency) but strict about
|
|
87
|
+
* name and version, since an entry missing either cannot pin anything and is
|
|
88
|
+
* worse than absent. A future lockfileVersion returns null rather than being
|
|
89
|
+
* misread by rules that no longer apply.
|
|
90
|
+
*/
|
|
91
|
+
export function parseLock(text) {
|
|
92
|
+
let parsed;
|
|
93
|
+
try {
|
|
94
|
+
parsed = JSON.parse(text);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (!isRecord(parsed))
|
|
100
|
+
return null;
|
|
101
|
+
if (parsed.lockfileVersion !== LOCKFILE_VERSION)
|
|
102
|
+
return null;
|
|
103
|
+
if (!Array.isArray(parsed.packages))
|
|
104
|
+
return null;
|
|
105
|
+
const packages = [];
|
|
106
|
+
for (const raw of parsed.packages) {
|
|
107
|
+
if (!isRecord(raw))
|
|
108
|
+
continue;
|
|
109
|
+
const { name, version, type, files } = raw;
|
|
110
|
+
if (typeof name !== 'string' || !name)
|
|
111
|
+
continue;
|
|
112
|
+
if (typeof version !== 'string' || !version)
|
|
113
|
+
continue;
|
|
114
|
+
packages.push(normalize({
|
|
115
|
+
name,
|
|
116
|
+
version,
|
|
117
|
+
type: typeof type === 'string' ? type : 'package',
|
|
118
|
+
...(Array.isArray(files) ? { files: files.filter((f) => typeof f === 'string') } : {}),
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
return { lockfileVersion: LOCKFILE_VERSION, packages: packages.sort(byIdentity) };
|
|
122
|
+
}
|
|
123
|
+
/** What changed between two lockfiles, by name+version. */
|
|
124
|
+
export function diffLock(prev, next) {
|
|
125
|
+
const before = new Set(prev.packages.map(keyOf));
|
|
126
|
+
const after = new Set(next.packages.map(keyOf));
|
|
127
|
+
return {
|
|
128
|
+
added: next.packages.filter((p) => !before.has(keyOf(p))).sort(byIdentity),
|
|
129
|
+
removed: prev.packages.filter((p) => !after.has(keyOf(p))).sort(byIdentity),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Is everything the lockfile pins present in `installed`?
|
|
134
|
+
*
|
|
135
|
+
* The reproducibility check, and it is deliberately one-directional: EXTRA
|
|
136
|
+
* packages do not fail it. A workspace may legitimately hold something installed
|
|
137
|
+
* outside the lock (a local experiment, a global install), and failing on that
|
|
138
|
+
* would make the check useless in practice. What must never pass is a MISSING or
|
|
139
|
+
* differently-versioned pin.
|
|
140
|
+
*/
|
|
141
|
+
export function isSatisfiedBy(lock, installed) {
|
|
142
|
+
const have = new Set(installed.map(keyOf));
|
|
143
|
+
return lock.packages.every((p) => have.has(keyOf(p)));
|
|
144
|
+
}
|
|
145
|
+
/** The pins absent from `installed` — what an `install --frozen` would fetch. */
|
|
146
|
+
export function missingFrom(lock, installed) {
|
|
147
|
+
const have = new Set(installed.map(keyOf));
|
|
148
|
+
return lock.packages.filter((p) => !have.has(keyOf(p))).sort(byIdentity);
|
|
149
|
+
}
|
|
150
|
+
/** `name@version` refs for the pins, in install order — what a caller feeds back
|
|
151
|
+
* to the installer to reproduce the set. */
|
|
152
|
+
export function lockRefs(lock) {
|
|
153
|
+
return [...lock.packages].sort(byIdentity).map(keyOf);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=lockfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../install/lockfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FileService } from '@corenel/protocol';
|
|
2
|
+
/** Structural mirror of @prompd/core's PackageStore. */
|
|
3
|
+
export interface PackageStoreLike {
|
|
4
|
+
writeFile(path: string, content: string): void | Promise<void>;
|
|
5
|
+
writeBytes?(path: string, bytes: Uint8Array): void | Promise<void>;
|
|
6
|
+
removeDir?(path: string): void | Promise<void>;
|
|
7
|
+
removeFile?(path: string): void | Promise<void>;
|
|
8
|
+
readFile?(path: string): Promise<string | null> | string | null;
|
|
9
|
+
readBytes?(path: string): Promise<Uint8Array> | Uint8Array;
|
|
10
|
+
readdir?(path: string): Promise<string[]> | string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function fileServicePackageStore(fs: FileService): PackageStoreLike;
|
|
13
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../install/store.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IAChE,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IAC3D,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;CACtD;AAeD,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAwBzE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Treat only "the path wasn't there" as ignorable on remove.
|
|
3
|
+
*
|
|
4
|
+
* Any other failure — a read-only source, a sidecar whose remove is unsupported,
|
|
5
|
+
* a permissions error — must surface. Swallowing those would leave a package
|
|
6
|
+
* half-removed while reporting success, which is worse than failing.
|
|
7
|
+
*/
|
|
8
|
+
function isNotFound(e) {
|
|
9
|
+
const name = e?.name;
|
|
10
|
+
const msg = String(e?.message ?? e);
|
|
11
|
+
return name === 'NotFoundError' || /not\s*found|no such|enoent/i.test(msg);
|
|
12
|
+
}
|
|
13
|
+
export function fileServicePackageStore(fs) {
|
|
14
|
+
const remove = (path) => fs.remove(path).catch((e) => { if (!isNotFound(e))
|
|
15
|
+
throw e; });
|
|
16
|
+
return {
|
|
17
|
+
writeFile: (path, content) => fs.write(path, content),
|
|
18
|
+
// Present only when the backend supports binary — core feature-detects it,
|
|
19
|
+
// and advertising a method that throws is worse than not advertising it.
|
|
20
|
+
...(fs.writeBytes ? { writeBytes: (path, bytes) => fs.writeBytes(path, bytes) } : {}),
|
|
21
|
+
removeDir: remove,
|
|
22
|
+
removeFile: remove,
|
|
23
|
+
readFile: (path) => fs.read(path).catch(() => null),
|
|
24
|
+
...(fs.readBytes ? { readBytes: (path) => fs.readBytes(path) } : {}),
|
|
25
|
+
readdir: async (path) => {
|
|
26
|
+
try {
|
|
27
|
+
const nodes = fs.listDir ? await fs.listDir(path) : await fs.list(path);
|
|
28
|
+
return nodes.map((n) => n.name);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// An absent directory is the common case here (a type dir that has never
|
|
32
|
+
// been installed into), not an error worth propagating.
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../install/store.ts"],"names":[],"mappings":"AA6BA;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,CAAU;IAC5B,MAAM,IAAI,GAAI,CAAuB,EAAE,IAAI,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAE,CAA0B,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;IAC9D,OAAO,IAAI,KAAK,eAAe,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAe;IACrD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAiB,EAAE,CAC7C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,OAAO;QACL,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;QACrD,2EAA2E;QAC3E,yEAAyE;QACzE,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,IAAY,EAAE,KAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,UAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1G,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACnD,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,EAAE,CAAC,SAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,yEAAyE;gBACzE,wDAAwD;gBACxD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/log.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../log.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../log.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAOjD;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAE7C"}
|
package/dist/log.js
CHANGED
|
@@ -6,7 +6,12 @@
|
|
|
6
6
|
let enabled = true;
|
|
7
7
|
export function setAgentLogging(on) {
|
|
8
8
|
enabled = on;
|
|
9
|
-
|
|
9
|
+
// Announce only when turning ON. A call that silences tracing must not itself
|
|
10
|
+
// write a line: hosts that disable it are usually doing so BECAUSE stdout is
|
|
11
|
+
// a data channel (a CLI answer, a JSON Lines event stream), and one stray
|
|
12
|
+
// line there is a parse error in whatever is reading.
|
|
13
|
+
if (on)
|
|
14
|
+
console.log('[agent] logging enabled');
|
|
10
15
|
}
|
|
11
16
|
export function isAgentLogging() {
|
|
12
17
|
return enabled;
|
package/dist/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../log.ts"],"names":[],"mappings":"AAAA;;;;iEAIiE;AACjE,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB,MAAM,UAAU,eAAe,CAAC,EAAW;IACzC,OAAO,GAAG,EAAE,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../log.ts"],"names":[],"mappings":"AAAA;;;;iEAIiE;AACjE,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB,MAAM,UAAU,eAAe,CAAC,EAAW;IACzC,OAAO,GAAG,EAAE,CAAC;IACb,8EAA8E;IAC9E,6EAA6E;IAC7E,0EAA0E;IAC1E,sDAAsD;IACtD,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,IAAe;IACrC,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,qDAAqD;AACrD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAA6C,CAAC,eAAe,GAAG,eAAe,CAAC;AACnF,CAAC"}
|
package/dist/prompts/host.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export interface PromptHost {
|
|
|
21
21
|
compileTemplate(path: string, liveSrc: string, values: Record<string, unknown>): Promise<CompileOutput>;
|
|
22
22
|
/** The app/site index injected into the help-system prompt. */
|
|
23
23
|
siteIndex(): string;
|
|
24
|
+
/** Product name of the host app ("Prompd", "Corenel"). The agent introduces
|
|
25
|
+
* itself with this, so a shared prompt cannot hardcode either brand. Optional:
|
|
26
|
+
* a host that does not set one gets the neutral default. */
|
|
27
|
+
appName?(): string;
|
|
24
28
|
}
|
|
25
29
|
/** Wire the host bits at boot (the app calls this before composing). */
|
|
26
30
|
export declare function setPromptHost(h: PromptHost): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../prompts/host.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAChE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAAG,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAElD,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,SAAS,EAAE,WAAW,CAAC;IACvB,+DAA+D;IAC/D,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,uDAAuD;IACvD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,yEAAyE;IACzE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrF;gEAC4D;IAC5D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxG,+DAA+D;IAC/D,SAAS,IAAI,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../prompts/host.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAAG,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAChE,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAAG,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAElD,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,SAAS,EAAE,WAAW,CAAC;IACvB,+DAA+D;IAC/D,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,uDAAuD;IACvD,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,yEAAyE;IACzE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrF;gEAC4D;IAC5D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxG,+DAA+D;IAC/D,SAAS,IAAI,MAAM,CAAC;IACpB;;gEAE4D;IAC5D,OAAO,CAAC,IAAI,MAAM,CAAC;CACpB;AAID,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAc;AAEhE,wBAAgB,UAAU,IAAI,UAAU,CAGvC;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,IAAI,WAAW,CAAmC"}
|
package/dist/prompts/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../prompts/host.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../prompts/host.ts"],"names":[],"mappings":"AAqCA,IAAI,IAAI,GAAsB,IAAI,CAAC;AAEnC,wEAAwE;AACxE,MAAM,UAAU,aAAa,CAAC,CAAa,IAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,eAAe,KAAkB,OAAO,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../prompts/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;iFACiF;AACjF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3G;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAW1G;AAED,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;0EACsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qDACiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC;uFACmF;IACnF,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAOD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../prompts/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;iFACiF;AACjF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe3G;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAW1G;AAED,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;0EACsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qDACiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC;uFACmF;IACnF,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAOD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC3E;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3E"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -87,6 +87,10 @@ export async function composeAgentSystem(args) {
|
|
|
87
87
|
? `## Memory\nNotes you've saved. Call recall_memory to read one in full; save_memory to add one.\n\n${memoryIdx.trim()}`
|
|
88
88
|
: '';
|
|
89
89
|
return compileConfigTemplate(systemPath, {
|
|
90
|
+
// Who the agent says it IS. Injected rather than written into the prompt,
|
|
91
|
+
// because the same shipped default is seeded into every host's config
|
|
92
|
+
// workspace and each one carries a different product name.
|
|
93
|
+
app: promptHost().appName?.() || 'Prompd',
|
|
90
94
|
persona: persona.trim(),
|
|
91
95
|
mode,
|
|
92
96
|
mode_hint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../prompts/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../prompts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export const RAW_DEFAULTS = {
|
|
|
20
20
|
"personas/senior-dev.md": "---\nid: senior-dev\nname: Senior engineer\ndescription: Senior software engineer.\n---\nYou are a senior software engineer. Bring that craft to every change:\n- Fit the codebase. Study neighboring code and follow its conventions before writing. Don't assume a library is available — confirm it's already used in the project before depending on it.\n- Write the minimum that solves the task. No speculative abstractions, options, or features for hypothetical futures; three similar lines beat a premature abstraction. No half-finished or stubbed implementations.\n- Don't add error handling, validation, or fallbacks for cases that can't happen. Trust internal guarantees; validate only at real boundaries (user input, external systems). No backwards-compat shims unless asked.\n- Comments are for the non-obvious WHY — a constraint, an invariant, a workaround. Don't narrate what the code already says; default to none.\n- Verify your work before calling a change done. If you couldn't verify something, say so plainly.\n- Be security-minded: no injection, no leaked secrets, least privilege.\n",
|
|
21
21
|
"personas/terse.md": "---\nid: terse\nname: Terse\ndescription: Extremely concise.\n---\nBe extremely concise. One sentence per update. No preamble. No summary unless asked.\n",
|
|
22
22
|
"memory/MEMORY.md": "# Memory index\n\nSaved notes appear here, one line each. The agent adds them with save_memory and\nreads them with recall_memory. This is the global (~/.prompd) memory; a project's\nown notes live in ./.prompd/memory.\n",
|
|
23
|
-
"systems/system-base.md": "---\nid: system-base\nname: Operational system prompt\nversion: 1.0.0\ndescription: The agent's system prompt — persona, mode, tool definitions and editor context composed by @prompd/core.\nparameters:\n - name: persona\n type: string\n description: The selected persona's voice/role text, placed first.\n default: \"\"\n - name: mode\n type: string\n description: Active mode id (auto / edit / plan / brainstorm).\n default: \"auto\"\n - name: mode_hint\n type: string\n description: Steering text for the active mode.\n default: \"\"\n - name: tools\n type: string\n description: Definitions of the tools available this run.\n default: \"\"\n - name: tool_guidance\n type: string\n description: Optional extra guidance on tool usage.\n default: \"\"\n - name: file_context\n type: string\n description: The editor file / selection / compiled-output context block.\n default: \"\"\n---\n{% if persona %}{{ persona }}\n\n{% endif %}You are the
|
|
23
|
+
"systems/system-base.md": "---\nid: system-base\nname: Operational system prompt\nversion: 1.0.0\ndescription: The agent's system prompt — persona, mode, tool definitions and editor context composed by @prompd/core.\nparameters:\n - name: persona\n type: string\n description: The selected persona's voice/role text, placed first.\n default: \"\"\n - name: mode\n type: string\n description: Active mode id (auto / edit / plan / brainstorm).\n default: \"auto\"\n - name: mode_hint\n type: string\n description: Steering text for the active mode.\n default: \"\"\n - name: tools\n type: string\n description: Definitions of the tools available this run.\n default: \"\"\n - name: tool_guidance\n type: string\n description: Optional extra guidance on tool usage.\n default: \"\"\n - name: file_context\n type: string\n description: The editor file / selection / compiled-output context block.\n default: \"\"\n - name: app\n type: string\n description: Product name of the host application, used for the agent's own identity.\n default: \"Prompd\"\n---\n{% if persona %}{{ persona }}\n\n{% endif %}You are the {{ app }} assistant embedded in the in-browser .prmd editor. You help the user author, compile, and improve .prmd/.md prompts (YAML frontmatter + Nunjucks body with typed parameters). When the user asks about the .prmd format itself — frontmatter fields, parameter types (including enums), date defaults, inheritance, or templating — the canonical reference is `languages/prmd.md` in the {{ app }} config workspace; consult it rather than guessing (it is already included in context whenever a .prmd/.md file is open).\n\nTo change the file open in the editor, call propose_edit with the COMPLETE new file content — the user reviews a diff and applies it. To read or change other files in the workspace, use the file tools (writes ask the user for permission first). Use compile_prompd to preview rendered output and search_packages to find registry packages. For any multi-step job, maintain a visible task list with todo_write: lay out the steps, keep one task in_progress, and mark each completed as you go. Prefer calling a tool over guessing, and be concise.\n\n## Tools available this run\n{{ tools }}\n{% if tool_guidance %}\n\n{{ tool_guidance }}\n{% endif %}\n{% if mode_hint %}\n\n## Mode\n{{ mode_hint }}\n{% endif %}\n{% if file_context %}\n\n{{ file_context }}\n{% endif %}\n",
|
|
24
24
|
"systems/system-pdflow.md": "---\nid: system-pdflow\nname: Workflow file system prompt\nversion: 1.0.0\ndescription: Adds .pdflow format knowledge (node taxonomy, edges, parameters) on top of the base system prompt.\ninherits: system-base.md\n---\n\n## Active file format — Prompd workflow (.pdflow)\n\nThe open file is a **Prompd workflow**: JSON with `{ version, metadata, parameters[], nodes[], edges[] }`. The web editor renders it as a linear chain — a fixed Start, ordered middle nodes, a fixed End — connected one edge each.\n\nEach node is `{ id, type, position, data }`. Node types and their key `data`:\n\n- `trigger` — Start (entry point). Exactly one.\n- `prompt` — runs a `.prmd`/`.md` prompt. `data.sourceType` is `'file'` (`data.source` = a WORKSPACE-RELATIVE path) or `'raw'` (`data.rawPrompt`). Optional `data.model` / `data.providerNodeId`.\n- `user-input` — pauses to collect input. `data.prompt`, `data.inputType` (`text` / `textarea` / `choice` / `confirm` / `number`).\n- `guardrail` — validates/gates. `data.systemPrompt`, `data.passExpression` or `data.scoreThreshold`.\n- `agent` — composite (input guardrail → prompt → output guardrail). `data.systemPrompt`, `data.userPrompt`, `data.maxIterations`; internal guardrails in `data.inputGuardrail` / `data.outputGuardrail` (each `{ enabled, preset|systemPrompt, passExpression|scoreThreshold }`).\n- `transformer` — JSON→JSON map. `data.mode: 'template'` with `data.template` (`{{ input }}` substitution).\n- `callback` / `checkpoint` — debug/observation point (logs node I/O).\n- `output` — End (workflow result). Exactly one.\n- `provider` — one off-chain node holding the canvas-wide provider/model; nodes reference it via `data.providerNodeId`.\n\nEdges thread each node's output to the next; the runner exposes `{{ input }}` / `{{ previous_output }}` to downstream nodes.\n\n### Example (minimal chain)\n\n```\n{\n \"version\": \"1.0\",\n \"metadata\": { \"name\": \"summarize\" },\n \"parameters\": [],\n \"nodes\": [\n { \"id\": \"start\", \"type\": \"trigger\", \"position\": { \"x\": 0, \"y\": 0 }, \"data\": {} },\n { \"id\": \"p1\", \"type\": \"prompt\", \"position\": { \"x\": 0, \"y\": 120 }, \"data\": { \"sourceType\": \"file\", \"source\": \"prompts/summarize.prmd\" } },\n { \"id\": \"end\", \"type\": \"output\", \"position\": { \"x\": 0, \"y\": 240 }, \"data\": {} }\n ],\n \"edges\": [\n { \"id\": \"e1\", \"source\": \"start\", \"target\": \"p1\" },\n { \"id\": \"e2\", \"source\": \"p1\", \"target\": \"end\" }\n ]\n}\n```\n\nTo edit the workflow, modify this JSON with the file tools (paths are workspace-relative). Keep exactly one `trigger` and one `output`.\n",
|
|
25
25
|
"systems/system-prmd-md.md": "---\nid: system-prmd-md\nname: Prompt file system prompt (.prmd / .md)\nversion: 1.0.0\ninherits: ./system-base.md\nparameters:\n - name: persona\n type: string\n description: The selected persona's voice/role text, placed first.\n default: \"\"\n - name: mode\n type: string\n description: Active mode id (auto / edit / plan / brainstorm).\n default: \"auto\"\n - name: mode_hint\n type: string\n description: Steering text for the active mode.\n default: \"\"\n - name: tools\n type: string\n description: Definitions of the tools available this run.\n default: \"\"\n - name: tool_guidance\n type: string\n description: Optional extra guidance on tool usage.\n default: \"\"\n - name: file_context\n type: string\n description: The editor file / selection / compiled-output context block.\n default: \"\"\n---\n\n{% include \"../languages/prmd.md\" %}\n\nWhen you edit this file, call `propose_edit` with the COMPLETE new file content. Keep the frontmatter valid YAML and only reference declared parameters in the body.\n",
|
|
26
26
|
"templates/index.json": "[\n {\n \"_comment\": \"EXAMPLE of a data-driven New File type. Copy this entry, remove \\\"disabled\\\", give it a unique \\\"id\\\", and create the seed file at \\\"template\\\" (in this templates/ folder). Tokens __ID__ / __NAME__ are substituted on create. Icon is a ui-kit name (e.g. IcFileCode, IcUser, IcFlow) or \\\"svg:<markup>\\\". See docs/file-types.md.\",\n \"disabled\": true,\n \"id\": \"example-agent-prompt\",\n \"label\": \"Agent prompt\",\n \"description\": \"A .prmd tuned for tool-using agents.\",\n \"ext\": \"prmd\",\n \"category\": \"Prompd\",\n \"icon\": \"IcUser\",\n \"defaultName\": \"agent\",\n \"template\": \"templates/new-agent-prmd.prmd\",\n \"accent\": true\n }\n]\n",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.generated.js","sourceRoot":"","sources":["../../../prompts/library/defaults.generated.ts"],"names":[],"mappings":"AAAA;;gFAEgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,wBAAwB,EAAE,ywEAAywE;IACnyE,mBAAmB,EAAE,0PAA0P;IAC/Q,2BAA2B,EAAE,87EAA87E;IAC39E,qCAAqC,EAAE,wuBAAwuB;IAC/wB,aAAa,EAAE,ysBAAysB;IACxtB,mBAAmB,EAAE,soJAAsoJ;IAC3pJ,eAAe,EAAE,wMAAwM;IACzN,qBAAqB,EAAE,oMAAoM;IAC3N,eAAe,EAAE,gLAAgL;IACjM,eAAe,EAAE,sMAAsM;IACvN,uBAAuB,EAAE,mhBAAmhB;IAC5iB,qBAAqB,EAAE,oKAAoK;IAC3L,0BAA0B,EAAE,4uBAA4uB;IACxwB,6BAA6B,EAAE,00BAA00B;IACz2B,8BAA8B,EAAE,qlCAAqlC;IACrnC,wBAAwB,EAAE,ykCAAykC;IACnmC,mBAAmB,EAAE,2JAA2J;IAChL,kBAAkB,EAAE,8NAA8N;IAClP,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"defaults.generated.js","sourceRoot":"","sources":["../../../prompts/library/defaults.generated.ts"],"names":[],"mappings":"AAAA;;gFAEgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,wBAAwB,EAAE,ywEAAywE;IACnyE,mBAAmB,EAAE,0PAA0P;IAC/Q,2BAA2B,EAAE,87EAA87E;IAC39E,qCAAqC,EAAE,wuBAAwuB;IAC/wB,aAAa,EAAE,ysBAAysB;IACxtB,mBAAmB,EAAE,soJAAsoJ;IAC3pJ,eAAe,EAAE,wMAAwM;IACzN,qBAAqB,EAAE,oMAAoM;IAC3N,eAAe,EAAE,gLAAgL;IACjM,eAAe,EAAE,sMAAsM;IACvN,uBAAuB,EAAE,mhBAAmhB;IAC5iB,qBAAqB,EAAE,oKAAoK;IAC3L,0BAA0B,EAAE,4uBAA4uB;IACxwB,6BAA6B,EAAE,00BAA00B;IACz2B,8BAA8B,EAAE,qlCAAqlC;IACrnC,wBAAwB,EAAE,ykCAAykC;IACnmC,mBAAmB,EAAE,2JAA2J;IAChL,kBAAkB,EAAE,8NAA8N;IAClP,wBAAwB,EAAE,24EAA24E;IACr6E,0BAA0B,EAAE,6lFAA6lF;IACznF,2BAA2B,EAAE,8jCAA8jC;IAC3lC,sBAAsB,EAAE,iuBAAiuB;IACzvB,kCAAkC,EAAE,0DAA0D;IAC9F,qCAAqC,EAAE,0JAA0J;IACjM,oCAAoC,EAAE,2NAA2N;IACjQ,sCAAsC,EAAE,8zDAA8zD;IACt2D,4BAA4B,EAAE,wtBAAwtB;IACtvB,4BAA4B,EAAE,8eAA8e;IAC5gB,0BAA0B,EAAE,oxBAAoxB;IAChzB,8BAA8B,EAAE,uoBAAuoB;IACvqB,qCAAqC,EAAE,s0FAAs0F;IAC72F,kCAAkC,EAAE,oFAAoF;IACxH,mCAAmC,EAAE,iOAAiO;IACtQ,+BAA+B,EAAE,4SAA4S;IAC7U,mCAAmC,EAAE,2FAA2F;IAChI,oCAAoC,EAAE,yOAAyO;IAC/Q,gCAAgC,EAAE,uTAAuT;IACzV,2CAA2C,EAAE,4HAA4H;IACzK,4CAA4C,EAAE,uRAAuR;IACrU,wCAAwC,EAAE,yUAAyU;IACnX,uCAAuC,EAAE,+FAA+F;IACxI,wCAAwC,EAAE,yNAAyN;IACnQ,oCAAoC,EAAE,0TAA0T;CACjW,CAAC"}
|
|
@@ -12,6 +12,9 @@ export interface StreamCompletionParams {
|
|
|
12
12
|
* visible output COMBINED, so a low value can starve the answer — omit to leave
|
|
13
13
|
* output unbounded (the caller opts in). */
|
|
14
14
|
max_completion_tokens?: number;
|
|
15
|
+
/** Sampling temperature. Reasoning-family models REJECT a non-default value,
|
|
16
|
+
* so the caller decides whether to send one — this layer only forwards. */
|
|
17
|
+
temperature?: number;
|
|
15
18
|
}
|
|
16
19
|
export interface AccumulatedToolCall {
|
|
17
20
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"AAIA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAKnE,YAAY,EAAE,KAAK,EAAE,CAAC;AAMtB,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAUD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;gDAE4C;IAC5C,qBAAqB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"AAIA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAK,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAKnE,YAAY,EAAE,KAAK,EAAE,CAAC;AAMtB,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEhD;AAUD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;gDAE4C;IAC5C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;+EAC2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAEpF,oHAAoH;AACpH,wBAAgB,cAAc,CAAC,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,KAAK,CAKnJ;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,sBAAsB,EAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAwE7B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CA6BjG;AAED;;;sEAGsE;AACtE,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/G,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAE1E;AAED;;;;yDAIyD;AACzD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;+CAG+C;AAC/C,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAE3F,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,CAA0B;AAEvF;;;+CAG+C;AAC/C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAUjF"}
|
|
@@ -44,6 +44,9 @@ export async function streamCompletion(client, params, signal, onText) {
|
|
|
44
44
|
// Undefined is dropped by the SDK's JSON serialization, so an unset cap
|
|
45
45
|
// leaves output unbounded (unchanged behavior).
|
|
46
46
|
max_completion_tokens: params.max_completion_tokens,
|
|
47
|
+
// Undefined is dropped by the SDK, so an unset temperature leaves the
|
|
48
|
+
// provider default in place (unchanged behavior).
|
|
49
|
+
temperature: params.temperature,
|
|
47
50
|
stream: true,
|
|
48
51
|
stream_options: { include_usage: true },
|
|
49
52
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"AAAA;;;6EAG6E;AAC7E,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAM9B,kFAAkF;AAClF,gFAAgF;AAChF,0EAA0E;AAC1E,IAAI,OAAO,GAAG,MAAM,CAAC;AACrB,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc;IACrB,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,EAAE,GAAG,GAAG,OAAO,KAAK,CAAC;IAC3B,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;AAC9C,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../providers/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LeaseStore } from './leaseStore';
|
|
2
|
+
import type { CorenelApiClient } from '../api/client';
|
|
3
|
+
export interface ApiLeaseStoreDeps {
|
|
4
|
+
client: CorenelApiClient;
|
|
5
|
+
/** Epoch ms. Only for the record's diagnostic timestamp — never used to decide
|
|
6
|
+
* anything, because clocks disagree and the epoch is the authority. */
|
|
7
|
+
now: () => number;
|
|
8
|
+
}
|
|
9
|
+
export declare function makeApiLeaseStore(deps: ApiLeaseStoreDeps): LeaseStore;
|
|
10
|
+
//# sourceMappingURL=apiLeaseStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiLeaseStore.d.ts","sourceRoot":"","sources":["../../sessions/apiLeaseStore.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB;2EACuE;IACvE,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAsCrE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { LeaseConflict } from '../api/client';
|
|
2
|
+
export function makeApiLeaseStore(deps) {
|
|
3
|
+
const toRecord = (sessionId, epoch, holder) => ({
|
|
4
|
+
sessionId,
|
|
5
|
+
epoch,
|
|
6
|
+
holder,
|
|
7
|
+
updatedAt: deps.now(),
|
|
8
|
+
});
|
|
9
|
+
return {
|
|
10
|
+
async read(sessionId) {
|
|
11
|
+
try {
|
|
12
|
+
const s = await deps.client.getSession(sessionId);
|
|
13
|
+
return toRecord(sessionId, s.epoch, s.holder);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Absent, unreachable, or not ours — all "no record I can act on". The
|
|
17
|
+
// caller's next step is the same in every case: try to acquire from
|
|
18
|
+
// epoch 0 and let the server refuse if it knows better.
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
async compareAndSet(sessionId, expectedEpoch, holder) {
|
|
23
|
+
try {
|
|
24
|
+
const lease = await deps.client.acquireLease(sessionId, expectedEpoch, holder);
|
|
25
|
+
return { ok: true, record: toRecord(sessionId, lease.epoch, lease.holder) };
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (err instanceof LeaseConflict) {
|
|
29
|
+
// Refused, and the server said which epoch won. Hand that back rather
|
|
30
|
+
// than throwing: "re-read and decide" is always what happens next.
|
|
31
|
+
return { ok: false, record: toRecord(sessionId, err.currentEpoch, null) };
|
|
32
|
+
}
|
|
33
|
+
// Anything else is a real failure — unreachable, unauthorized, no such
|
|
34
|
+
// session. It must NOT be reported as "someone else holds it", because a
|
|
35
|
+
// caller told that will wait politely for a lease that is already theirs.
|
|
36
|
+
throw err;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=apiLeaseStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiLeaseStore.js","sourceRoot":"","sources":["../../sessions/apiLeaseStore.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,KAAa,EAAE,MAAqB,EAAe,EAAE,CAAC,CAAC;QAC1F,SAAS;QACT,KAAK;QACL,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,SAAS;YAClB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAClD,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;gBACvE,oEAAoE;gBACpE,wDAAwD;gBACxD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM;YAClD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;gBAC/E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,sEAAsE;oBACtE,mEAAmE;oBACnE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC5E,CAAC;gBACD,uEAAuE;gBACvE,yEAAyE;gBACzE,0EAA0E;gBAC1E,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { TimelineEntry } from './timeline';
|
|
2
|
+
export type SessionStatus = 'running' | 'paused' | 'archived' | 'failed' | 'completed';
|
|
3
|
+
/** What the runtime is waiting on. Derived from the tail of the timeline. */
|
|
4
|
+
export type CursorPhase = 'awaiting_model' | 'awaiting_tool_result' | 'awaiting_approval' | 'idle';
|
|
5
|
+
/** A question only a human can answer. Survives transport: an approval requested
|
|
6
|
+
* on the laptop and answered from the phone is the SAME object, and only the
|
|
7
|
+
* client differs (spec s4.4.4). */
|
|
8
|
+
export interface PendingApproval {
|
|
9
|
+
id: string;
|
|
10
|
+
kind: 'tool_permission' | 'resume_unknown' | 'budget';
|
|
11
|
+
callId: string | null;
|
|
12
|
+
/** The timeline entry this is about, so an answer can be attributed. */
|
|
13
|
+
index: number;
|
|
14
|
+
question: string;
|
|
15
|
+
options: {
|
|
16
|
+
id: string;
|
|
17
|
+
label: string;
|
|
18
|
+
}[];
|
|
19
|
+
requestedAt: string;
|
|
20
|
+
}
|
|
21
|
+
export interface SessionHead {
|
|
22
|
+
schemaVersion: 1;
|
|
23
|
+
sessionId: string;
|
|
24
|
+
status: SessionStatus;
|
|
25
|
+
updatedAt: string;
|
|
26
|
+
task?: {
|
|
27
|
+
id: string;
|
|
28
|
+
objective: string;
|
|
29
|
+
cwd: string;
|
|
30
|
+
};
|
|
31
|
+
agent?: {
|
|
32
|
+
package: string;
|
|
33
|
+
version: string;
|
|
34
|
+
entrypoint: string;
|
|
35
|
+
};
|
|
36
|
+
cursor: {
|
|
37
|
+
nextIndex: number;
|
|
38
|
+
phase: CursorPhase;
|
|
39
|
+
};
|
|
40
|
+
pendingApproval: PendingApproval | null;
|
|
41
|
+
usage: {
|
|
42
|
+
inputTokens: number;
|
|
43
|
+
outputTokens: number;
|
|
44
|
+
wallMs: number;
|
|
45
|
+
};
|
|
46
|
+
/** Opaque workflow position when the session is running a .pdflow package.
|
|
47
|
+
* Corenel stores and returns it; the workflow runtime owns its meaning. */
|
|
48
|
+
workflow?: {
|
|
49
|
+
package: string;
|
|
50
|
+
version: string;
|
|
51
|
+
position: unknown;
|
|
52
|
+
completedNodes: {
|
|
53
|
+
id: string;
|
|
54
|
+
outputRef: string;
|
|
55
|
+
}[];
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export declare const HEAD_VERSION: 1;
|
|
59
|
+
export interface DeriveHeadInput {
|
|
60
|
+
sessionId: string;
|
|
61
|
+
entries: readonly TimelineEntry[];
|
|
62
|
+
nextIndex: number;
|
|
63
|
+
updatedAt: string;
|
|
64
|
+
/** Carried through unchanged — none of it is derivable from the timeline. */
|
|
65
|
+
carry?: Pick<SessionHead, 'task' | 'agent' | 'workflow' | 'pendingApproval'>;
|
|
66
|
+
/** The session's own status when it is not implied by the timeline (paused,
|
|
67
|
+
* archived). Absent, the phase decides between running and idle. */
|
|
68
|
+
status?: SessionStatus;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Rebuild the head from the timeline.
|
|
72
|
+
*
|
|
73
|
+
* The phase comes from the LAST entry, because that is what the runtime is
|
|
74
|
+
* actually blocked on:
|
|
75
|
+
* - a tool call still `executing` -> awaiting_tool_result
|
|
76
|
+
* - a user message with no reply -> awaiting_model
|
|
77
|
+
* - an approval outstanding -> awaiting_approval (it outranks the rest;
|
|
78
|
+
* nothing proceeds until it is answered)
|
|
79
|
+
* - anything else -> idle
|
|
80
|
+
*/
|
|
81
|
+
export declare function deriveHead(input: DeriveHeadInput): SessionHead;
|
|
82
|
+
export declare function serializeHead(head: SessionHead): string;
|
|
83
|
+
/**
|
|
84
|
+
* Parse a stored head, or null when it is unusable.
|
|
85
|
+
*
|
|
86
|
+
* Null is not an error condition for the caller: the head is a cache, so the
|
|
87
|
+
* answer to "it did not parse" is "fold the log again", never "fail the session".
|
|
88
|
+
*/
|
|
89
|
+
export declare function parseHead(text: string): SessionHead | null;
|
|
90
|
+
//# sourceMappingURL=head.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"head.d.ts","sourceRoot":"","sources":["../../sessions/head.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEvF,6EAA6E;AAC7E,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,sBAAsB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAEnG;;mCAEmC;AACnC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,QAAQ,CAAC;IACtD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,CAAC,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC;IAClD,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE;+EAC2E;IAC3E,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;CACzH;AAED,eAAO,MAAM,YAAY,EAAG,CAAU,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,iBAAiB,CAAC,CAAC;IAC7E;wEACoE;IACpE,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,WAAW,CAqB9D;AAsBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAO1D"}
|