@illumiarq/lumis 1.2.8 → 1.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/adapter-loader.d.ts +67 -0
- package/dist/adapter-loader.d.ts.map +1 -0
- package/dist/adapter-loader.js +273 -0
- package/dist/adapter-loader.js.map +1 -0
- package/dist/cli.d.ts +16 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +173 -402
- package/dist/cli.js.map +1 -1
- package/dist/commands/commands.command.d.ts +38 -0
- package/dist/commands/commands.command.d.ts.map +1 -0
- package/dist/commands/commands.command.js +176 -0
- package/dist/commands/commands.command.js.map +1 -0
- package/dist/commands/doctor.command.d.ts +9 -0
- package/dist/commands/doctor.command.d.ts.map +1 -0
- package/dist/commands/doctor.command.js +922 -0
- package/dist/commands/doctor.command.js.map +1 -0
- package/dist/commands/init.command.d.ts +9 -0
- package/dist/commands/init.command.d.ts.map +1 -0
- package/dist/commands/init.command.js +135 -0
- package/dist/commands/init.command.js.map +1 -0
- package/dist/commands/intent.command.d.ts +26 -0
- package/dist/commands/intent.command.d.ts.map +1 -0
- package/dist/commands/intent.command.js +211 -0
- package/dist/commands/intent.command.js.map +1 -0
- package/dist/commands/ir-rebuild.command.d.ts +9 -0
- package/dist/commands/ir-rebuild.command.d.ts.map +1 -0
- package/dist/commands/ir-rebuild.command.js +36 -0
- package/dist/commands/ir-rebuild.command.js.map +1 -0
- package/dist/commands/ir-show.command.d.ts +9 -0
- package/dist/commands/ir-show.command.d.ts.map +1 -0
- package/dist/commands/ir-show.command.js +32 -0
- package/dist/commands/ir-show.command.js.map +1 -0
- package/dist/commands/make.command.d.ts +9 -0
- package/dist/commands/make.command.d.ts.map +1 -0
- package/dist/commands/make.command.js +93 -0
- package/dist/commands/make.command.js.map +1 -0
- package/dist/commands/pack.command.d.ts +16 -0
- package/dist/commands/pack.command.d.ts.map +1 -0
- package/dist/commands/pack.command.js +44 -0
- package/dist/commands/pack.command.js.map +1 -0
- package/dist/commands/runtime.command.d.ts +6 -0
- package/dist/commands/runtime.command.d.ts.map +1 -0
- package/dist/commands/runtime.command.js +379 -0
- package/dist/commands/runtime.command.js.map +1 -0
- package/dist/commands/runtime.d.ts +45 -0
- package/dist/commands/runtime.d.ts.map +1 -0
- package/dist/commands/runtime.js +66 -0
- package/dist/commands/runtime.js.map +1 -0
- package/dist/commands/tinker-agent-plan.d.ts +26 -0
- package/dist/commands/tinker-agent-plan.d.ts.map +1 -0
- package/dist/commands/tinker-agent-plan.js +115 -0
- package/dist/commands/tinker-agent-plan.js.map +1 -0
- package/dist/commands/tinker-chat-commands.d.ts +19 -0
- package/dist/commands/tinker-chat-commands.d.ts.map +1 -0
- package/dist/commands/tinker-chat-commands.js +263 -0
- package/dist/commands/tinker-chat-commands.js.map +1 -0
- package/dist/commands/tinker-chat-runtime.d.ts +30 -0
- package/dist/commands/tinker-chat-runtime.d.ts.map +1 -0
- package/dist/commands/tinker-chat-runtime.js +227 -0
- package/dist/commands/tinker-chat-runtime.js.map +1 -0
- package/dist/commands/tinker-classic-mode.d.ts +15 -0
- package/dist/commands/tinker-classic-mode.d.ts.map +1 -0
- package/dist/commands/tinker-classic-mode.js +160 -0
- package/dist/commands/tinker-classic-mode.js.map +1 -0
- package/dist/commands/tinker-eval.command.d.ts +3 -0
- package/dist/commands/tinker-eval.command.d.ts.map +1 -0
- package/dist/commands/tinker-eval.command.js +151 -0
- package/dist/commands/tinker-eval.command.js.map +1 -0
- package/dist/commands/tinker-repl-display.d.ts +15 -0
- package/dist/commands/tinker-repl-display.d.ts.map +1 -0
- package/dist/commands/tinker-repl-display.js +147 -0
- package/dist/commands/tinker-repl-display.js.map +1 -0
- package/dist/commands/tinker-session-runtime.d.ts +27 -0
- package/dist/commands/tinker-session-runtime.d.ts.map +1 -0
- package/dist/commands/tinker-session-runtime.js +196 -0
- package/dist/commands/tinker-session-runtime.js.map +1 -0
- package/dist/commands/tinker.command.d.ts +9 -0
- package/dist/commands/tinker.command.d.ts.map +1 -0
- package/dist/commands/tinker.command.js +142 -0
- package/dist/commands/tinker.command.js.map +1 -0
- package/dist/commands/use.command.d.ts +10 -0
- package/dist/commands/use.command.d.ts.map +1 -0
- package/dist/commands/use.command.js +69 -0
- package/dist/commands/use.command.js.map +1 -0
- package/dist/config-loader.d.ts +110 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +119 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/index.d.ts +19 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts +16 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +301 -0
- package/dist/launcher.js.map +1 -0
- package/dist/lib/file-scanner.d.ts +8 -0
- package/dist/lib/file-scanner.d.ts.map +1 -0
- package/dist/lib/file-scanner.js +70 -0
- package/dist/lib/file-scanner.js.map +1 -0
- package/dist/lib/tinker-memory.d.ts +19 -0
- package/dist/lib/tinker-memory.d.ts.map +1 -0
- package/dist/lib/tinker-memory.js +107 -0
- package/dist/lib/tinker-memory.js.map +1 -0
- package/dist/lib/tinker-observer.d.ts +47 -0
- package/dist/lib/tinker-observer.d.ts.map +1 -0
- package/dist/lib/tinker-observer.js +77 -0
- package/dist/lib/tinker-observer.js.map +1 -0
- package/dist/lib/tinker-policy.d.ts +21 -0
- package/dist/lib/tinker-policy.d.ts.map +1 -0
- package/dist/lib/tinker-policy.js +102 -0
- package/dist/lib/tinker-policy.js.map +1 -0
- package/dist/lib/tinker-replay.d.ts +51 -0
- package/dist/lib/tinker-replay.d.ts.map +1 -0
- package/dist/lib/tinker-replay.js +123 -0
- package/dist/lib/tinker-replay.js.map +1 -0
- package/dist/{console.d.ts → output/ansi.d.ts} +4 -8
- package/dist/output/ansi.d.ts.map +1 -0
- package/dist/{console.js → output/ansi.js} +4 -12
- package/dist/output/ansi.js.map +1 -0
- package/dist/output/plan-display.d.ts +4 -0
- package/dist/output/plan-display.d.ts.map +1 -0
- package/dist/output/plan-display.js +49 -0
- package/dist/output/plan-display.js.map +1 -0
- package/dist/output/result-display.d.ts +5 -0
- package/dist/output/result-display.d.ts.map +1 -0
- package/dist/output/result-display.js +17 -0
- package/dist/output/result-display.js.map +1 -0
- package/dist/plugins/tinker-plugin.d.ts +86 -0
- package/dist/plugins/tinker-plugin.d.ts.map +1 -0
- package/dist/plugins/tinker-plugin.js +42 -0
- package/dist/plugins/tinker-plugin.js.map +1 -0
- package/dist/router-preferences.d.ts +5 -0
- package/dist/router-preferences.d.ts.map +1 -0
- package/dist/router-preferences.js +22 -0
- package/dist/router-preferences.js.map +1 -0
- package/dist/runtime/executor.d.ts +33 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +180 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/orchestration.d.ts +43 -0
- package/dist/runtime/orchestration.d.ts.map +1 -0
- package/dist/runtime/orchestration.js +209 -0
- package/dist/runtime/orchestration.js.map +1 -0
- package/dist/runtime/policy.d.ts +49 -0
- package/dist/runtime/policy.d.ts.map +1 -0
- package/dist/runtime/policy.js +78 -0
- package/dist/runtime/policy.js.map +1 -0
- package/dist/runtime/profiles.d.ts +15 -0
- package/dist/runtime/profiles.d.ts.map +1 -0
- package/dist/runtime/profiles.js +131 -0
- package/dist/runtime/profiles.js.map +1 -0
- package/dist/runtime/transcripts.d.ts +59 -0
- package/dist/runtime/transcripts.d.ts.map +1 -0
- package/dist/runtime/transcripts.js +172 -0
- package/dist/runtime/transcripts.js.map +1 -0
- package/dist/tools/git-diff.d.ts +3 -0
- package/dist/tools/git-diff.d.ts.map +1 -0
- package/dist/tools/git-diff.js +16 -0
- package/dist/tools/git-diff.js.map +1 -0
- package/dist/tools/index.d.ts +24 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +88 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lint.d.ts +3 -0
- package/dist/tools/lint.d.ts.map +1 -0
- package/dist/tools/lint.js +35 -0
- package/dist/tools/lint.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +47 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/run-command.d.ts +3 -0
- package/dist/tools/run-command.d.ts.map +1 -0
- package/dist/tools/run-command.js +71 -0
- package/dist/tools/run-command.js.map +1 -0
- package/dist/tools/run-tests.d.ts +3 -0
- package/dist/tools/run-tests.d.ts.map +1 -0
- package/dist/tools/run-tests.js +49 -0
- package/dist/tools/run-tests.js.map +1 -0
- package/dist/tools/tool-dispatch.d.ts +32 -0
- package/dist/tools/tool-dispatch.d.ts.map +1 -0
- package/dist/tools/tool-dispatch.js +120 -0
- package/dist/tools/tool-dispatch.js.map +1 -0
- package/dist/tools/typecheck.d.ts +3 -0
- package/dist/tools/typecheck.d.ts.map +1 -0
- package/dist/tools/typecheck.js +48 -0
- package/dist/tools/typecheck.js.map +1 -0
- package/dist/tools/types.d.ts +62 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +7 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/write-file.d.ts +15 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +52 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/tracing/types.d.ts +10 -0
- package/dist/tracing/types.d.ts.map +1 -0
- package/dist/tracing/types.js +2 -0
- package/dist/tracing/types.js.map +1 -0
- package/package.json +37 -19
- package/dist/bridges/project-bridge.d.ts +0 -2
- package/dist/bridges/project-bridge.d.ts.map +0 -1
- package/dist/bridges/project-bridge.js +0 -171
- package/dist/bridges/project-bridge.js.map +0 -1
- package/dist/commands/app/cache-workflows.d.ts +0 -7
- package/dist/commands/app/cache-workflows.d.ts.map +0 -1
- package/dist/commands/app/cache-workflows.js +0 -139
- package/dist/commands/app/cache-workflows.js.map +0 -1
- package/dist/commands/app/command-runtime.d.ts +0 -11
- package/dist/commands/app/command-runtime.d.ts.map +0 -1
- package/dist/commands/app/command-runtime.js +0 -41
- package/dist/commands/app/command-runtime.js.map +0 -1
- package/dist/commands/app/config-cache.d.ts +0 -3
- package/dist/commands/app/config-cache.d.ts.map +0 -1
- package/dist/commands/app/config-cache.js +0 -75
- package/dist/commands/app/config-cache.js.map +0 -1
- package/dist/commands/app/config-publish.d.ts +0 -2
- package/dist/commands/app/config-publish.d.ts.map +0 -1
- package/dist/commands/app/config-publish.js +0 -68
- package/dist/commands/app/config-publish.js.map +0 -1
- package/dist/commands/app/config-stubs.d.ts +0 -3
- package/dist/commands/app/config-stubs.d.ts.map +0 -1
- package/dist/commands/app/config-stubs.js +0 -154
- package/dist/commands/app/config-stubs.js.map +0 -1
- package/dist/commands/app/database.d.ts +0 -3
- package/dist/commands/app/database.d.ts.map +0 -1
- package/dist/commands/app/database.js +0 -221
- package/dist/commands/app/database.js.map +0 -1
- package/dist/commands/app/docs.d.ts +0 -7
- package/dist/commands/app/docs.d.ts.map +0 -1
- package/dist/commands/app/docs.js +0 -61
- package/dist/commands/app/docs.js.map +0 -1
- package/dist/commands/app/routes.d.ts +0 -5
- package/dist/commands/app/routes.d.ts.map +0 -1
- package/dist/commands/app/routes.js +0 -95
- package/dist/commands/app/routes.js.map +0 -1
- package/dist/commands/app/security.d.ts +0 -3
- package/dist/commands/app/security.d.ts.map +0 -1
- package/dist/commands/app/security.js +0 -15
- package/dist/commands/app/security.js.map +0 -1
- package/dist/commands/app/worker-schedule.d.ts +0 -5
- package/dist/commands/app/worker-schedule.d.ts.map +0 -1
- package/dist/commands/app/worker-schedule.js +0 -94
- package/dist/commands/app/worker-schedule.js.map +0 -1
- package/dist/commands/app-commands.d.ts +0 -19
- package/dist/commands/app-commands.d.ts.map +0 -1
- package/dist/commands/app-commands.js +0 -77
- package/dist/commands/app-commands.js.map +0 -1
- package/dist/commands/build-vercel-fn.d.ts +0 -9
- package/dist/commands/build-vercel-fn.d.ts.map +0 -1
- package/dist/commands/build-vercel-fn.js +0 -32
- package/dist/commands/build-vercel-fn.js.map +0 -1
- package/dist/commands/build.d.ts +0 -14
- package/dist/commands/build.d.ts.map +0 -1
- package/dist/commands/build.js +0 -24
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/info.d.ts +0 -2
- package/dist/commands/info.d.ts.map +0 -1
- package/dist/commands/info.js +0 -25
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/keys.d.ts +0 -3
- package/dist/commands/keys.d.ts.map +0 -1
- package/dist/commands/keys.js +0 -60
- package/dist/commands/keys.js.map +0 -1
- package/dist/commands/maintenance.d.ts +0 -9
- package/dist/commands/maintenance.d.ts.map +0 -1
- package/dist/commands/maintenance.js +0 -38
- package/dist/commands/maintenance.js.map +0 -1
- package/dist/commands/module-list.d.ts +0 -2
- package/dist/commands/module-list.d.ts.map +0 -1
- package/dist/commands/module-list.js +0 -27
- package/dist/commands/module-list.js.map +0 -1
- package/dist/commands/preview.d.ts +0 -14
- package/dist/commands/preview.d.ts.map +0 -1
- package/dist/commands/preview.js +0 -49
- package/dist/commands/preview.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -16
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -61
- package/dist/commands/serve.js.map +0 -1
- package/dist/console.d.ts.map +0 -1
- package/dist/console.js.map +0 -1
- package/dist/paths.d.ts +0 -21
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js +0 -47
- package/dist/paths.js.map +0 -1
- package/dist/server-wrapper.d.ts +0 -12
- package/dist/server-wrapper.d.ts.map +0 -1
- package/dist/server-wrapper.js +0 -63
- package/dist/server-wrapper.js.map +0 -1
- package/dist/vercel-wrapper.d.ts +0 -6
- package/dist/vercel-wrapper.d.ts.map +0 -1
- package/dist/vercel-wrapper.js +0 -50
- package/dist/vercel-wrapper.js.map +0 -1
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinker Observability
|
|
3
|
+
*
|
|
4
|
+
* Records agent turns, tool calls, and verification results to Trazze
|
|
5
|
+
* and local structured logs for replay and debugging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default no-op observer.
|
|
9
|
+
*/
|
|
10
|
+
export const noopObserver = {
|
|
11
|
+
recordTurn: async () => { },
|
|
12
|
+
flush: async () => { },
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Composite observer that chains multiple observers.
|
|
16
|
+
*/
|
|
17
|
+
export class CompositeObserver {
|
|
18
|
+
observers;
|
|
19
|
+
constructor(observers) {
|
|
20
|
+
this.observers = observers;
|
|
21
|
+
}
|
|
22
|
+
async recordTurn(event) {
|
|
23
|
+
await Promise.all(this.observers.map((o) => o.recordTurn(event)));
|
|
24
|
+
}
|
|
25
|
+
async flush() {
|
|
26
|
+
await Promise.all(this.observers.map((o) => o.flush()));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Trazze push observer — sends events to Trazze via HTTP/gRPC.
|
|
31
|
+
* (Stub: full implementation depends on Trazze client availability.)
|
|
32
|
+
*/
|
|
33
|
+
export class TrazzeObserver {
|
|
34
|
+
baseUrl;
|
|
35
|
+
sessionId;
|
|
36
|
+
constructor(baseUrl, sessionId) {
|
|
37
|
+
this.baseUrl = baseUrl;
|
|
38
|
+
this.sessionId = sessionId;
|
|
39
|
+
}
|
|
40
|
+
async recordTurn(event) {
|
|
41
|
+
if (!process.env.TRAZZE_ENABLED)
|
|
42
|
+
return;
|
|
43
|
+
try {
|
|
44
|
+
const response = await fetch(`${this.baseUrl}/events`, {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: { 'Content-Type': 'application/json' },
|
|
47
|
+
body: JSON.stringify({
|
|
48
|
+
event_type: 'tinker-turn',
|
|
49
|
+
payload: event,
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
console.error(`[tinker-observer] Trazze push failed: ${response.status}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.error(`[tinker-observer] Trazze push error:`, err);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async flush() {
|
|
61
|
+
// Trazze flushes on its own schedule; this is a no-op.
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create an observer based on environment.
|
|
66
|
+
*/
|
|
67
|
+
export function createObserver(sessionId) {
|
|
68
|
+
const observers = [];
|
|
69
|
+
if (process.env.TRAZZE_ENABLED && process.env.TRAZZE_BASE_URL) {
|
|
70
|
+
observers.push(new TrazzeObserver(process.env.TRAZZE_BASE_URL, sessionId));
|
|
71
|
+
}
|
|
72
|
+
if (observers.length === 0) {
|
|
73
|
+
return noopObserver;
|
|
74
|
+
}
|
|
75
|
+
return new CompositeObserver(observers);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=tinker-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tinker-observer.js","sourceRoot":"","sources":["../../src/lib/tinker-observer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC3C,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;IAC1B,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACT;IAApB,YAAoB,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;IAAG,CAAC;IAEnD,KAAK,CAAC,UAAU,CAAC,KAAsB;QACtC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,KAAK;QACV,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACxD,CAAC;CACD;AAED;;;GAGG;AACH,MAAM,OAAO,cAAc;IACN;IAAyB;IAA7C,YAAoB,OAAe,EAAU,SAAiB;QAA1C,YAAO,GAAP,OAAO,CAAQ;QAAU,cAAS,GAAT,SAAS,CAAQ;IAAG,CAAC;IAElE,KAAK,CAAC,UAAU,CAAC,KAAsB;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;YAAE,OAAM;QAEvC,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,UAAU,EAAE,aAAa;oBACzB,OAAO,EAAE,KAAK;iBACd,CAAC;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YAC1E,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAA;QAC3D,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK;QACV,uDAAuD;IACxD,CAAC;CACD;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,MAAM,SAAS,GAAqB,EAAE,CAAA;IAEtC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAA;IACpB,CAAC;IAED,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinker Enterprise Policy Controls
|
|
3
|
+
*
|
|
4
|
+
* Governs what operations are allowed in a session based on TINKER_POLICY env var.
|
|
5
|
+
*/
|
|
6
|
+
export type TinkerPolicy = 'read-only' | 'plan-only' | 'full';
|
|
7
|
+
export interface PolicyGate {
|
|
8
|
+
canRead(): boolean;
|
|
9
|
+
canWrite(): boolean;
|
|
10
|
+
canExecute(): boolean;
|
|
11
|
+
canToolCall(): boolean;
|
|
12
|
+
describeLimitations(): string[];
|
|
13
|
+
}
|
|
14
|
+
export declare function getPolicyGate(policy: TinkerPolicy): PolicyGate;
|
|
15
|
+
export declare function getTinkerPolicy(): TinkerPolicy;
|
|
16
|
+
export declare function getPolicyForSession(): PolicyGate;
|
|
17
|
+
/**
|
|
18
|
+
* Check if an operation is allowed; throw if not.
|
|
19
|
+
*/
|
|
20
|
+
export declare function enforcePolicy(gate: PolicyGate, operation: 'read' | 'write' | 'execute' | 'tool-call'): void;
|
|
21
|
+
//# sourceMappingURL=tinker-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tinker-policy.d.ts","sourceRoot":"","sources":["../../src/lib/tinker-policy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,CAAA;AAE7D,MAAM,WAAW,UAAU;IAC1B,OAAO,IAAI,OAAO,CAAA;IAClB,QAAQ,IAAI,OAAO,CAAA;IACnB,UAAU,IAAI,OAAO,CAAA;IACrB,WAAW,IAAI,OAAO,CAAA;IACtB,mBAAmB,IAAI,MAAM,EAAE,CAAA;CAC/B;AA4ED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAS9D;AAED,wBAAgB,eAAe,IAAI,YAAY,CAM9C;AAED,wBAAgB,mBAAmB,IAAI,UAAU,CAGhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAgB3G"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinker Enterprise Policy Controls
|
|
3
|
+
*
|
|
4
|
+
* Governs what operations are allowed in a session based on TINKER_POLICY env var.
|
|
5
|
+
*/
|
|
6
|
+
class ReadOnlyPolicy {
|
|
7
|
+
canRead() {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
canWrite() {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
canExecute() {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
canToolCall() {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
describeLimitations() {
|
|
20
|
+
return [
|
|
21
|
+
'Read-only mode: file writes disabled',
|
|
22
|
+
'Read-only mode: command execution disabled',
|
|
23
|
+
'Read-only mode: tool calls disabled',
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
class PlanOnlyPolicy {
|
|
28
|
+
canRead() {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
canWrite() {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
canExecute() {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
canToolCall() {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
describeLimitations() {
|
|
41
|
+
return [
|
|
42
|
+
'Plan-only mode: file writes disabled',
|
|
43
|
+
'Plan-only mode: command execution disabled',
|
|
44
|
+
'Plan-only mode: tool calls allowed for planning only',
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
class FullPolicy {
|
|
49
|
+
canRead() {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
canWrite() {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
canExecute() {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
canToolCall() {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
describeLimitations() {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function getPolicyGate(policy) {
|
|
66
|
+
switch (policy) {
|
|
67
|
+
case 'read-only':
|
|
68
|
+
return new ReadOnlyPolicy();
|
|
69
|
+
case 'plan-only':
|
|
70
|
+
return new PlanOnlyPolicy();
|
|
71
|
+
case 'full':
|
|
72
|
+
return new FullPolicy();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function getTinkerPolicy() {
|
|
76
|
+
const raw = process.env.TINKER_POLICY;
|
|
77
|
+
if (raw === 'read-only' || raw === 'plan-only' || raw === 'full') {
|
|
78
|
+
return raw;
|
|
79
|
+
}
|
|
80
|
+
return 'full'; // default to unrestricted
|
|
81
|
+
}
|
|
82
|
+
export function getPolicyForSession() {
|
|
83
|
+
const policy = getTinkerPolicy();
|
|
84
|
+
return getPolicyGate(policy);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if an operation is allowed; throw if not.
|
|
88
|
+
*/
|
|
89
|
+
export function enforcePolicy(gate, operation) {
|
|
90
|
+
const allowed = operation === 'read'
|
|
91
|
+
? gate.canRead()
|
|
92
|
+
: operation === 'write'
|
|
93
|
+
? gate.canWrite()
|
|
94
|
+
: operation === 'execute'
|
|
95
|
+
? gate.canExecute()
|
|
96
|
+
: gate.canToolCall();
|
|
97
|
+
if (!allowed) {
|
|
98
|
+
const policy = getTinkerPolicy();
|
|
99
|
+
throw new Error(`Operation '${operation}' is not allowed under TINKER_POLICY=${policy}. ${gate.describeLimitations().join(' ')}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=tinker-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tinker-policy.js","sourceRoot":"","sources":["../../src/lib/tinker-policy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,cAAc;IACnB,OAAO;QACN,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,QAAQ;QACP,OAAO,KAAK,CAAA;IACb,CAAC;IAED,UAAU;QACT,OAAO,KAAK,CAAA;IACb,CAAC;IAED,WAAW;QACV,OAAO,KAAK,CAAA;IACb,CAAC;IAED,mBAAmB;QAClB,OAAO;YACN,sCAAsC;YACtC,4CAA4C;YAC5C,qCAAqC;SACrC,CAAA;IACF,CAAC;CACD;AAED,MAAM,cAAc;IACnB,OAAO;QACN,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,QAAQ;QACP,OAAO,KAAK,CAAA;IACb,CAAC;IAED,UAAU;QACT,OAAO,KAAK,CAAA;IACb,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,mBAAmB;QAClB,OAAO;YACN,sCAAsC;YACtC,4CAA4C;YAC5C,sDAAsD;SACtD,CAAA;IACF,CAAC;CACD;AAED,MAAM,UAAU;IACf,OAAO;QACN,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,UAAU;QACT,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,mBAAmB;QAClB,OAAO,EAAE,CAAA;IACV,CAAC;CACD;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IACjD,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,WAAW;YACf,OAAO,IAAI,cAAc,EAAE,CAAA;QAC5B,KAAK,WAAW;YACf,OAAO,IAAI,cAAc,EAAE,CAAA;QAC5B,KAAK,MAAM;YACV,OAAO,IAAI,UAAU,EAAE,CAAA;IACzB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,eAAe;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IACrC,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QAClE,OAAO,GAAG,CAAA;IACX,CAAC;IACD,OAAO,MAAM,CAAA,CAAC,0BAA0B;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAgB,EAAE,SAAqD;IACpG,MAAM,OAAO,GACZ,SAAS,KAAK,MAAM;QACnB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;QAChB,CAAC,CAAC,SAAS,KAAK,OAAO;YACtB,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjB,CAAC,CAAC,SAAS,KAAK,SAAS;gBACxB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;gBACnB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAExB,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;QAChC,MAAM,IAAI,KAAK,CACd,cAAc,SAAS,wCAAwC,MAAM,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAChH,CAAA;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type AuditEntry = {
|
|
2
|
+
timestamp: string;
|
|
3
|
+
sessionId: string;
|
|
4
|
+
eventType: 'file-write' | 'file-delete' | 'command-execute' | 'tool-call' | 'verification';
|
|
5
|
+
path?: string;
|
|
6
|
+
tool?: string;
|
|
7
|
+
outcome: 'success' | 'failure' | 'skipped';
|
|
8
|
+
details?: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
export type SessionReplayEntry = {
|
|
11
|
+
timestamp: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
turnIndex: number;
|
|
14
|
+
role: 'user' | 'assistant' | 'system';
|
|
15
|
+
content: string;
|
|
16
|
+
toolCalls?: Array<{
|
|
17
|
+
tool: string;
|
|
18
|
+
args: Record<string, unknown>;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Audit trail writer — appends entries to ~/.lumis/audit.jsonl
|
|
23
|
+
*/
|
|
24
|
+
export declare class AuditTrail {
|
|
25
|
+
private auditPath;
|
|
26
|
+
constructor(projectRoot: string);
|
|
27
|
+
record(entry: AuditEntry): void;
|
|
28
|
+
recordFileWrite(filePath: string, outcome: 'success' | 'failure', details?: Record<string, unknown>): void;
|
|
29
|
+
recordFileDelete(filePath: string, outcome: 'success' | 'failure', details?: Record<string, unknown>): void;
|
|
30
|
+
recordToolCall(tool: string, outcome: 'success' | 'failure' | 'skipped', details?: Record<string, unknown>): void;
|
|
31
|
+
recordVerification(outcome: 'success' | 'failure', details?: Record<string, unknown>): void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Session replay writer — appends turn entries to ~/.lumis/replays/<sessionId>.jsonl
|
|
35
|
+
*/
|
|
36
|
+
export declare class SessionReplayer {
|
|
37
|
+
private sessionId;
|
|
38
|
+
private replayPath;
|
|
39
|
+
private turnIndex;
|
|
40
|
+
constructor(projectRoot: string, sessionId?: string);
|
|
41
|
+
recordUserMessage(content: string): void;
|
|
42
|
+
recordAssistantMessage(content: string, toolCalls?: Array<{
|
|
43
|
+
tool: string;
|
|
44
|
+
args: Record<string, unknown>;
|
|
45
|
+
}>): void;
|
|
46
|
+
private recordEntry;
|
|
47
|
+
getReplayPath(): string;
|
|
48
|
+
getSessionId(): string;
|
|
49
|
+
}
|
|
50
|
+
export declare function generateSessionId(): string;
|
|
51
|
+
//# sourceMappingURL=tinker-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tinker-replay.d.ts","sourceRoot":"","sources":["../../src/lib/tinker-replay.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,UAAU,GAAG;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,YAAY,GAAG,aAAa,GAAG,iBAAiB,GAAG,WAAW,GAAG,cAAc,CAAA;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAA;CAClE,CAAA;AAED;;GAEG;AACH,qBAAa,UAAU;IACtB,OAAO,CAAC,SAAS,CAAQ;gBAEb,WAAW,EAAE,MAAM;IAI/B,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAS/B,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW1G,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAW3G,cAAc,CACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,EAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,IAAI;IAWP,kBAAkB,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAS3F;AAED;;GAEG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,SAAS,CAAY;gBAEjB,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAKnD,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAkBjH,OAAO,CAAC,WAAW;IAiBnB,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,MAAM;CAGtB;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinker Deterministic Replay and Audit Trail
|
|
3
|
+
*
|
|
4
|
+
* Records session interactions to JSONL for debugging, regression testing, and compliance.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import crypto from 'node:crypto';
|
|
9
|
+
/**
|
|
10
|
+
* Audit trail writer — appends entries to ~/.lumis/audit.jsonl
|
|
11
|
+
*/
|
|
12
|
+
export class AuditTrail {
|
|
13
|
+
auditPath;
|
|
14
|
+
constructor(projectRoot) {
|
|
15
|
+
this.auditPath = path.join(projectRoot, '.lumis', 'audit.jsonl');
|
|
16
|
+
}
|
|
17
|
+
record(entry) {
|
|
18
|
+
try {
|
|
19
|
+
fs.mkdirSync(path.dirname(this.auditPath), { recursive: true });
|
|
20
|
+
fs.appendFileSync(this.auditPath, `${JSON.stringify(entry)}\n`, 'utf8');
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error(`[audit-trail] Failed to write: ${err instanceof Error ? err.message : String(err)}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
recordFileWrite(filePath, outcome, details) {
|
|
27
|
+
this.record({
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
sessionId: process.env.TINKER_SESSION_ID || 'unknown',
|
|
30
|
+
eventType: 'file-write',
|
|
31
|
+
path: filePath,
|
|
32
|
+
outcome,
|
|
33
|
+
...(details ? { details } : {}),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
recordFileDelete(filePath, outcome, details) {
|
|
37
|
+
this.record({
|
|
38
|
+
timestamp: new Date().toISOString(),
|
|
39
|
+
sessionId: process.env.TINKER_SESSION_ID || 'unknown',
|
|
40
|
+
eventType: 'file-delete',
|
|
41
|
+
path: filePath,
|
|
42
|
+
outcome,
|
|
43
|
+
...(details ? { details } : {}),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
recordToolCall(tool, outcome, details) {
|
|
47
|
+
this.record({
|
|
48
|
+
timestamp: new Date().toISOString(),
|
|
49
|
+
sessionId: process.env.TINKER_SESSION_ID || 'unknown',
|
|
50
|
+
eventType: 'tool-call',
|
|
51
|
+
tool,
|
|
52
|
+
outcome,
|
|
53
|
+
...(details ? { details } : {}),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
recordVerification(outcome, details) {
|
|
57
|
+
this.record({
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
sessionId: process.env.TINKER_SESSION_ID || 'unknown',
|
|
60
|
+
eventType: 'verification',
|
|
61
|
+
outcome,
|
|
62
|
+
...(details ? { details } : {}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Session replay writer — appends turn entries to ~/.lumis/replays/<sessionId>.jsonl
|
|
68
|
+
*/
|
|
69
|
+
export class SessionReplayer {
|
|
70
|
+
sessionId;
|
|
71
|
+
replayPath;
|
|
72
|
+
turnIndex = 0;
|
|
73
|
+
constructor(projectRoot, sessionId) {
|
|
74
|
+
this.sessionId = sessionId || generateSessionId();
|
|
75
|
+
this.replayPath = path.join(projectRoot, '.lumis', 'replays', `${this.sessionId}.jsonl`);
|
|
76
|
+
}
|
|
77
|
+
recordUserMessage(content) {
|
|
78
|
+
this.recordEntry('user', content);
|
|
79
|
+
}
|
|
80
|
+
recordAssistantMessage(content, toolCalls) {
|
|
81
|
+
const entry = {
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
sessionId: this.sessionId,
|
|
84
|
+
turnIndex: this.turnIndex++,
|
|
85
|
+
role: 'assistant',
|
|
86
|
+
content,
|
|
87
|
+
...(toolCalls ? { toolCalls } : {}),
|
|
88
|
+
};
|
|
89
|
+
try {
|
|
90
|
+
fs.mkdirSync(path.dirname(this.replayPath), { recursive: true });
|
|
91
|
+
fs.appendFileSync(this.replayPath, `${JSON.stringify(entry)}\n`, 'utf8');
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.error(`[session-replay] Failed to write: ${err instanceof Error ? err.message : String(err)}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
recordEntry(role, content) {
|
|
98
|
+
const entry = {
|
|
99
|
+
timestamp: new Date().toISOString(),
|
|
100
|
+
sessionId: this.sessionId,
|
|
101
|
+
turnIndex: this.turnIndex++,
|
|
102
|
+
role,
|
|
103
|
+
content,
|
|
104
|
+
};
|
|
105
|
+
try {
|
|
106
|
+
fs.mkdirSync(path.dirname(this.replayPath), { recursive: true });
|
|
107
|
+
fs.appendFileSync(this.replayPath, `${JSON.stringify(entry)}\n`, 'utf8');
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
console.error(`[session-replay] Failed to write: ${err instanceof Error ? err.message : String(err)}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
getReplayPath() {
|
|
114
|
+
return this.replayPath;
|
|
115
|
+
}
|
|
116
|
+
getSessionId() {
|
|
117
|
+
return this.sessionId;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function generateSessionId() {
|
|
121
|
+
return `tinker-${Date.now()}-${crypto.randomBytes(4).toString('hex')}`;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=tinker-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tinker-replay.js","sourceRoot":"","sources":["../../src/lib/tinker-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const ansi: {
|
|
2
2
|
bold: (value: string) => string;
|
|
3
3
|
dim: (value: string) => string;
|
|
4
4
|
red: (value: string) => string;
|
|
5
5
|
green: (value: string) => string;
|
|
6
6
|
yellow: (value: string) => string;
|
|
7
|
-
blue: (value: string) => string;
|
|
8
|
-
magenta: (value: string) => string;
|
|
9
7
|
cyan: (value: string) => string;
|
|
8
|
+
magenta: (value: string) => string;
|
|
10
9
|
gray: (value: string) => string;
|
|
11
|
-
|
|
10
|
+
label: (value: string) => string;
|
|
12
11
|
ok: (value: string) => string;
|
|
13
12
|
warn: (value: string) => string;
|
|
14
13
|
fail: (value: string) => string;
|
|
15
|
-
bullet: (value: string) => string;
|
|
16
14
|
};
|
|
17
|
-
|
|
18
|
-
export declare function writeError(message: string): void;
|
|
19
|
-
//# sourceMappingURL=console.d.ts.map
|
|
15
|
+
//# sourceMappingURL=ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../src/output/ansi.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI;kBACD,MAAM,KAAG,MAAM;iBAChB,MAAM,KAAG,MAAM;iBACf,MAAM,KAAG,MAAM;mBACb,MAAM,KAAG,MAAM;oBACd,MAAM,KAAG,MAAM;kBACjB,MAAM,KAAG,MAAM;qBACZ,MAAM,KAAG,MAAM;kBAClB,MAAM,KAAG,MAAM;mBACd,MAAM,KAAG,MAAM;gBAClB,MAAM,KAAG,MAAM;kBACb,MAAM,KAAG,MAAM;kBACf,MAAM,KAAG,MAAM;CAC9B,CAAA"}
|
|
@@ -2,26 +2,18 @@ const ESC = '\u001B[';
|
|
|
2
2
|
function wrap(code, value) {
|
|
3
3
|
return `${ESC}${code}m${value}${ESC}0m`;
|
|
4
4
|
}
|
|
5
|
-
export const
|
|
5
|
+
export const ansi = {
|
|
6
6
|
bold: (value) => wrap('1', value),
|
|
7
7
|
dim: (value) => wrap('2', value),
|
|
8
8
|
red: (value) => wrap('31', value),
|
|
9
9
|
green: (value) => wrap('32', value),
|
|
10
10
|
yellow: (value) => wrap('33', value),
|
|
11
|
-
blue: (value) => wrap('34', value),
|
|
12
|
-
magenta: (value) => wrap('35', value),
|
|
13
11
|
cyan: (value) => wrap('36', value),
|
|
12
|
+
magenta: (value) => wrap('35', value),
|
|
14
13
|
gray: (value) => wrap('90', value),
|
|
15
|
-
|
|
14
|
+
label: (value) => `${wrap('1;35', 'Lumis')} ${wrap('2', '::')} ${wrap('1;36', value)}`,
|
|
16
15
|
ok: (value) => `${wrap('32', '✓')} ${value}`,
|
|
17
16
|
warn: (value) => `${wrap('33', '▲')} ${value}`,
|
|
18
17
|
fail: (value) => `${wrap('31', '✖')} ${value}`,
|
|
19
|
-
bullet: (value) => `${wrap('36', '•')} ${value}`,
|
|
20
18
|
};
|
|
21
|
-
|
|
22
|
-
process.stdout.write(`${message}\n`);
|
|
23
|
-
}
|
|
24
|
-
export function writeError(message) {
|
|
25
|
-
process.stderr.write(`${message}\n`);
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=console.js.map
|
|
19
|
+
//# sourceMappingURL=ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/output/ansi.ts"],"names":[],"mappings":"AAAA,MAAM,GAAG,GAAG,SAAS,CAAA;AAErB,SAAS,IAAI,CAAC,IAAY,EAAE,KAAa;IACvC,OAAO,GAAG,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,CAAA;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IACjD,GAAG,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IAChD,GAAG,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACjD,KAAK,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACnD,MAAM,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACpD,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IAClD,OAAO,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACrD,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IAClD,KAAK,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;IACtG,EAAE,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE;IAC5D,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE;IAC9D,IAAI,EAAE,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE;CAC/D,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CoreExecutionPlan } from '@lumiarq/context';
|
|
2
|
+
import type { CommandContext } from '../commands/runtime.js';
|
|
3
|
+
export declare function renderPlanDetail(context: CommandContext, plan: CoreExecutionPlan, packLabel: string): void;
|
|
4
|
+
//# sourceMappingURL=plan-display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-display.d.ts","sourceRoot":"","sources":["../../src/output/plan-display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,kBAAkB,CAAA;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAiB5D,wBAAgB,gBAAgB,CAC/B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,GACf,IAAI,CAoCN"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ansi } from './ansi.js';
|
|
2
|
+
function stepRiskLabel(step) {
|
|
3
|
+
if (step.operation === 'delete')
|
|
4
|
+
return 'destructive';
|
|
5
|
+
if (step.operation === 'update')
|
|
6
|
+
return 'overwrite';
|
|
7
|
+
if (step.operation === 'append')
|
|
8
|
+
return 'append';
|
|
9
|
+
return 'safe';
|
|
10
|
+
}
|
|
11
|
+
function rollbackDescription(step) {
|
|
12
|
+
if (step.rollback.operation === 'delete')
|
|
13
|
+
return `delete ${step.rollback.targetFile}`;
|
|
14
|
+
return `restore ${step.rollback.targetFile}`;
|
|
15
|
+
}
|
|
16
|
+
export function renderPlanDetail(context, plan, packLabel) {
|
|
17
|
+
context.write(`${ansi.label('Execution Plan')}\n`);
|
|
18
|
+
context.write(` ${ansi.bold('Pack')}: ${packLabel}\n`);
|
|
19
|
+
context.write(` ${ansi.bold('Plan id')}: ${ansi.dim(plan.id)}\n`);
|
|
20
|
+
context.write(` ${ansi.bold('Plan steps')}: ${plan.steps.length}\n`);
|
|
21
|
+
context.write(` ${ansi.bold('Estimated files')}: ${plan.estimatedFiles}\n`);
|
|
22
|
+
if (plan.steps.length === 0) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
context.write('\n');
|
|
26
|
+
for (let idx = 0; idx < plan.steps.length; idx++) {
|
|
27
|
+
const step = plan.steps[idx];
|
|
28
|
+
const risk = stepRiskLabel(step);
|
|
29
|
+
const riskLabel = risk === 'destructive'
|
|
30
|
+
? ansi.red(risk)
|
|
31
|
+
: risk === 'overwrite'
|
|
32
|
+
? ansi.yellow(risk)
|
|
33
|
+
: risk === 'append'
|
|
34
|
+
? ansi.cyan(risk)
|
|
35
|
+
: ansi.green(risk);
|
|
36
|
+
context.write(` ${ansi.magenta(`[${idx + 1}/${plan.steps.length}]`)} ${ansi.bold(step.operation)} ${step.artifactKind} ${step.name}\n`);
|
|
37
|
+
context.write(` module: ${step.module}\n`);
|
|
38
|
+
context.write(` target: ${step.targetFile}\n`);
|
|
39
|
+
context.write(` risk: ${riskLabel}\n`);
|
|
40
|
+
context.write(` rollback: ${rollbackDescription(step)}\n`);
|
|
41
|
+
if (step.rationale) {
|
|
42
|
+
context.write(` rationale: ${step.rationale}\n`);
|
|
43
|
+
}
|
|
44
|
+
if (step.requiresConfirmation) {
|
|
45
|
+
context.write(` confirm: required before write\n`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=plan-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-display.js","sourceRoot":"","sources":["../../src/output/plan-display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ExecutionSummary } from '@lumiarq/agent';
|
|
2
|
+
import type { CoreExecutionStep } from '@lumiarq/context';
|
|
3
|
+
import type { CommandContext } from '../commands/runtime.js';
|
|
4
|
+
export declare function renderExecutionResult(context: CommandContext, summary: ExecutionSummary, steps: CoreExecutionStep[]): void;
|
|
5
|
+
//# sourceMappingURL=result-display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-display.d.ts","sourceRoot":"","sources":["../../src/output/result-display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,iBAAiB,EAAE,GACxB,IAAI,CAgBN"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ansi } from './ansi.js';
|
|
2
|
+
export function renderExecutionResult(context, summary, steps) {
|
|
3
|
+
for (let idx = 0; idx < steps.length; idx++) {
|
|
4
|
+
const step = steps[idx];
|
|
5
|
+
const isFailed = step.id === summary.failedStepId;
|
|
6
|
+
const isDone = !isFailed && idx < summary.completed;
|
|
7
|
+
const label = isFailed ? ansi.fail('FAIL') : isDone ? ansi.ok('ok') : ansi.dim('SKIP');
|
|
8
|
+
context.write(` [${label}] ${step.operation} ${step.artifactKind} ${step.name}\n`);
|
|
9
|
+
}
|
|
10
|
+
context.write('\n');
|
|
11
|
+
context.write(`${ansi.label('Execution Result')}\n`);
|
|
12
|
+
context.write(` ${ansi.bold('Completed steps')}: ${summary.completed}\n`);
|
|
13
|
+
if (!summary.rolledBack) {
|
|
14
|
+
context.write(` ${ansi.bold('Written files')}: ${summary.writtenFiles.length}\n`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=result-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-display.js","sourceRoot":"","sources":["../../src/output/result-display.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,qBAAqB,CACpC,OAAuB,EACvB,OAAyB,EACzB,KAA0B;IAE1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAE,CAAA;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,YAAY,CAAA;QACjD,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,CAAA;QACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACtF,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;IACpF,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACpD,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC,CAAA;IAE1E,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,CAAA;IACnF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tinker Plugin System
|
|
3
|
+
*
|
|
4
|
+
* Enables third-party extensions to add custom commands, tools, and session hooks.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolCall, ToolResult } from '../tools/index.js';
|
|
7
|
+
export type TinkerCommand = {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
handler: (args: string[], context: TinkerPluginContext) => Promise<void> | void;
|
|
11
|
+
};
|
|
12
|
+
export type TinkerPluginContext = {
|
|
13
|
+
projectRoot: string;
|
|
14
|
+
session: {
|
|
15
|
+
context: {
|
|
16
|
+
write: (msg: string) => void;
|
|
17
|
+
writeError: (msg: string) => void;
|
|
18
|
+
};
|
|
19
|
+
chatModel?: string | undefined;
|
|
20
|
+
chatEnabled: boolean;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export interface TinkerPlugin {
|
|
24
|
+
/**
|
|
25
|
+
* Unique plugin identifier (e.g., 'plugin-name').
|
|
26
|
+
*/
|
|
27
|
+
readonly name: string;
|
|
28
|
+
/**
|
|
29
|
+
* Human-readable description.
|
|
30
|
+
*/
|
|
31
|
+
readonly description?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Version (semver).
|
|
34
|
+
*/
|
|
35
|
+
readonly version?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Custom Tinker commands this plugin adds.
|
|
38
|
+
*/
|
|
39
|
+
readonly commands?: TinkerCommand[];
|
|
40
|
+
/**
|
|
41
|
+
* Custom tools (tool-call dispatch) this plugin provides.
|
|
42
|
+
* Each tool becomes available as a potential LLM-emitted tool call.
|
|
43
|
+
*/
|
|
44
|
+
readonly tools?: ToolCall[];
|
|
45
|
+
/**
|
|
46
|
+
* Called when a Tinker session starts.
|
|
47
|
+
*/
|
|
48
|
+
onSessionStart?(context: TinkerPluginContext): void | Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Called after each user message is sent (before LLM processing).
|
|
51
|
+
* Return a string to pre-process the message, or undefined to pass through.
|
|
52
|
+
*/
|
|
53
|
+
onUserMessage?(msg: string, context: TinkerPluginContext): string | undefined | Promise<string | undefined>;
|
|
54
|
+
/**
|
|
55
|
+
* Called after each LLM response.
|
|
56
|
+
* Can observe/transform the response.
|
|
57
|
+
*/
|
|
58
|
+
onAssistantMessage?(msg: string, context: TinkerPluginContext): void | Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Called when a tool is about to be executed.
|
|
61
|
+
* Return false to reject/cancel the tool call.
|
|
62
|
+
*/
|
|
63
|
+
onToolCall?(tool: ToolCall, context: TinkerPluginContext): boolean | Promise<boolean>;
|
|
64
|
+
/**
|
|
65
|
+
* Called after a tool executes.
|
|
66
|
+
* Can log, monitor, or transform the result.
|
|
67
|
+
*/
|
|
68
|
+
onToolResult?(call: ToolCall, result: ToolResult, context: TinkerPluginContext): ToolResult | Promise<ToolResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Called when session ends.
|
|
71
|
+
*/
|
|
72
|
+
onSessionEnd?(context: TinkerPluginContext): void | Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Registry for loaded plugins.
|
|
76
|
+
*/
|
|
77
|
+
export declare class TinkerPluginRegistry {
|
|
78
|
+
private plugins;
|
|
79
|
+
register(plugin: TinkerPlugin): void;
|
|
80
|
+
unregister(name: string): boolean;
|
|
81
|
+
get(name: string): TinkerPlugin | undefined;
|
|
82
|
+
getAll(): TinkerPlugin[];
|
|
83
|
+
getAllCommands(): TinkerCommand[];
|
|
84
|
+
callHook(hookName: keyof TinkerPlugin, args: unknown[]): Promise<unknown[]>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=tinker-plugin.d.ts.map
|