@dungle-scrubs/tallow 0.9.3 → 0.9.6
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/cli.js +7 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/interactive-mode-patch.d.ts +24 -10
- package/dist/interactive-mode-patch.d.ts.map +1 -1
- package/dist/interactive-mode-patch.js +285 -148
- package/dist/interactive-mode-patch.js.map +1 -1
- package/dist/interactive-reset.d.ts +49 -0
- package/dist/interactive-reset.d.ts.map +1 -0
- package/dist/interactive-reset.js +40 -0
- package/dist/interactive-reset.js.map +1 -0
- package/dist/pi-tui-editor-patch.d.ts +10 -0
- package/dist/pi-tui-editor-patch.d.ts.map +1 -0
- package/dist/pi-tui-editor-patch.js +159 -0
- package/dist/pi-tui-editor-patch.js.map +1 -0
- package/dist/pi-tui-patch.d.ts +2 -0
- package/dist/pi-tui-patch.d.ts.map +1 -0
- package/dist/pi-tui-patch.js +563 -0
- package/dist/pi-tui-patch.js.map +1 -0
- package/dist/pi-tui-settings-list-patch.d.ts +11 -0
- package/dist/pi-tui-settings-list-patch.d.ts.map +1 -0
- package/dist/pi-tui-settings-list-patch.js +38 -0
- package/dist/pi-tui-settings-list-patch.js.map +1 -0
- package/dist/reset-diagnostics.d.ts +69 -0
- package/dist/reset-diagnostics.d.ts.map +1 -0
- package/dist/reset-diagnostics.js +41 -0
- package/dist/reset-diagnostics.js.map +1 -0
- package/dist/sdk.d.ts +5 -21
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +180 -149
- package/dist/sdk.js.map +1 -1
- package/dist/workspace-transition-interactive.d.ts +1 -0
- package/dist/workspace-transition-interactive.d.ts.map +1 -1
- package/dist/workspace-transition-interactive.js +7 -17
- package/dist/workspace-transition-interactive.js.map +1 -1
- package/extensions/__integration__/audit-findings.test.ts +6 -16
- package/extensions/__integration__/teams-runtime.test.ts +4 -1
- package/extensions/_icons/index.ts +2 -4
- package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
- package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
- package/extensions/_shared/image-metadata.ts +99 -0
- package/extensions/_shared/inline-preview.ts +1 -1
- package/extensions/_shared/pid-registry.ts +0 -1
- package/extensions/_shared/terminal-links.ts +22 -0
- package/extensions/ask-user-question-tool/index.ts +0 -3
- package/extensions/clear/__tests__/clear.test.ts +270 -3
- package/extensions/command-expansion/index.ts +1 -1
- package/extensions/context-files/index.ts +5 -1
- package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
- package/extensions/context-fork/extension.json +1 -1
- package/extensions/context-fork/index.ts +32 -0
- package/extensions/edit-tool-enhanced/index.ts +2 -1
- package/extensions/hooks/index.ts +33 -11
- package/extensions/loop/index.ts +14 -1
- package/extensions/lsp/index.ts +64 -13
- package/extensions/lsp/package.json +2 -2
- package/extensions/permissions/__tests__/permissions.test.ts +4 -4
- package/extensions/random-spinner/index.ts +7 -642
- package/extensions/read-tool-enhanced/index.ts +6 -8
- package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +4 -5
- package/extensions/render-stabilizer/index.ts +6 -6
- package/extensions/show-system-prompt/__tests__/show-system-prompt.test.ts +1 -1
- package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
- package/extensions/slash-command-bridge/index.ts +14 -2
- package/extensions/subagent-tool/index.ts +1 -1
- package/extensions/subagent-tool/model-resolver.ts +274 -7
- package/extensions/tasks/__tests__/state-ui.test.ts +3 -3
- package/extensions/tasks/__tests__/widget-subagents.test.ts +2 -2
- package/extensions/tasks/commands/register-tasks-extension.ts +10 -10
- package/extensions/tasks/state/index.ts +1 -1
- package/extensions/tasks/ui/index.ts +2 -7
- package/extensions/teams-tool/tools/register-extension.ts +1 -3
- package/extensions/web-search-tool/index.ts +2 -1
- package/extensions/write-tool-enhanced/__tests__/write-tool-enhanced.test.ts +21 -6
- package/extensions/write-tool-enhanced/index.ts +2 -1
- package/node_modules/@mariozechner/pi-tui/README.md +56 -34
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
- package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
- package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
- package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
- package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
- package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
- package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
- package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
- package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
- package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +0 -2
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +12 -23
- package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
- package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
- package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
- package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
- package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
- package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
- package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
- package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
- package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
- package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
- package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
- package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
- package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
- package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
- package/node_modules/@mariozechner/pi-tui/package.json +6 -6
- package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
- package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
- package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
- package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
- package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
- package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
- package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
- package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
- package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
- package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
- package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
- package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
- package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
- package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
- package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +11 -23
- package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
- package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
- package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
- package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
- package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
- package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
- package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
- package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
- package/package.json +13 -13
- package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
- package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
- package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
- package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
- package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
- package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
- package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
- package/packages/tallow-tui/node_modules/marked/README.md +5 -4
- package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
- package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
- package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
- package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
- package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
- package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
- package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
- package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
- package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
- package/packages/tallow-tui/node_modules/marked/package.json +26 -34
- package/runtime/model-metadata-overrides.ts +10 -1
- package/runtime/pid-schema.ts +26 -6
- package/skills/tallow-expert/SKILL.md +1 -3
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
- package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
- package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
- package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
- package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
- package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
- package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
- package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -49
- package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
- package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
- package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
- package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
- package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
- package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
- package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
- package/packages/tallow-tui/node_modules/marked/marked.min.js +0 -69
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset diagnostics capture structured reset and deferred-trigger events.
|
|
3
|
+
*
|
|
4
|
+
* Keeps an in-memory ring buffer for tests and optional debug inspection.
|
|
5
|
+
* Production behavior stays quiet unless TALLOW_DEBUG_RESET=1 is set.
|
|
6
|
+
*/
|
|
7
|
+
/** Reset/deferred event emitted during session reset handling. */
|
|
8
|
+
export type ResetDiagnosticEvent = {
|
|
9
|
+
readonly kind: "deferred_cancelled";
|
|
10
|
+
readonly reason: string;
|
|
11
|
+
readonly source: string;
|
|
12
|
+
timestamp: number;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: "deferred_dropped";
|
|
15
|
+
readonly reason: string;
|
|
16
|
+
readonly source: string;
|
|
17
|
+
timestamp: number;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: "deferred_registered";
|
|
20
|
+
readonly source: string;
|
|
21
|
+
timestamp: number;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: "reset_complete";
|
|
24
|
+
readonly reason: string;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
} | {
|
|
27
|
+
readonly kind: "reset_start";
|
|
28
|
+
readonly reason: string;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
};
|
|
31
|
+
/** Reset/deferred event input before timestamp attachment. */
|
|
32
|
+
export type ResetDiagnosticInput = {
|
|
33
|
+
readonly kind: "deferred_cancelled";
|
|
34
|
+
readonly reason: string;
|
|
35
|
+
readonly source: string;
|
|
36
|
+
} | {
|
|
37
|
+
readonly kind: "deferred_dropped";
|
|
38
|
+
readonly reason: string;
|
|
39
|
+
readonly source: string;
|
|
40
|
+
} | {
|
|
41
|
+
readonly kind: "deferred_registered";
|
|
42
|
+
readonly source: string;
|
|
43
|
+
} | {
|
|
44
|
+
readonly kind: "reset_complete";
|
|
45
|
+
readonly reason: string;
|
|
46
|
+
} | {
|
|
47
|
+
readonly kind: "reset_start";
|
|
48
|
+
readonly reason: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Record one reset diagnostic event.
|
|
52
|
+
*
|
|
53
|
+
* @param event - Structured reset/deferred event
|
|
54
|
+
* @returns Nothing
|
|
55
|
+
*/
|
|
56
|
+
export declare function recordResetDiagnostic(event: ResetDiagnosticInput): void;
|
|
57
|
+
/**
|
|
58
|
+
* Return a snapshot of the current reset diagnostics for tests.
|
|
59
|
+
*
|
|
60
|
+
* @returns Recorded reset diagnostics
|
|
61
|
+
*/
|
|
62
|
+
export declare function getResetDiagnosticsForTests(): readonly ResetDiagnosticEvent[];
|
|
63
|
+
/**
|
|
64
|
+
* Clear captured reset diagnostics between tests.
|
|
65
|
+
*
|
|
66
|
+
* @returns Nothing
|
|
67
|
+
*/
|
|
68
|
+
export declare function resetResetDiagnosticsForTests(): void;
|
|
69
|
+
//# sourceMappingURL=reset-diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset-diagnostics.d.ts","sourceRoot":"","sources":["../src/reset-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,kEAAkE;AAClE,MAAM,MAAM,oBAAoB,GAC7B;IACA,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACjB,CAAC;AAEL,8DAA8D;AAC9D,MAAM,MAAM,oBAAoB,GAC7B;IACA,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACvB,CAAC;AAIL;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CASvE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,SAAS,oBAAoB,EAAE,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAEpD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset diagnostics capture structured reset and deferred-trigger events.
|
|
3
|
+
*
|
|
4
|
+
* Keeps an in-memory ring buffer for tests and optional debug inspection.
|
|
5
|
+
* Production behavior stays quiet unless TALLOW_DEBUG_RESET=1 is set.
|
|
6
|
+
*/
|
|
7
|
+
const MAX_DIAGNOSTIC_EVENTS = 200;
|
|
8
|
+
const diagnostics = [];
|
|
9
|
+
/**
|
|
10
|
+
* Record one reset diagnostic event.
|
|
11
|
+
*
|
|
12
|
+
* @param event - Structured reset/deferred event
|
|
13
|
+
* @returns Nothing
|
|
14
|
+
*/
|
|
15
|
+
export function recordResetDiagnostic(event) {
|
|
16
|
+
const entry = { ...event, timestamp: Date.now() };
|
|
17
|
+
diagnostics.push(entry);
|
|
18
|
+
if (diagnostics.length > MAX_DIAGNOSTIC_EVENTS) {
|
|
19
|
+
diagnostics.splice(0, diagnostics.length - MAX_DIAGNOSTIC_EVENTS);
|
|
20
|
+
}
|
|
21
|
+
if (process.env.TALLOW_DEBUG_RESET === "1") {
|
|
22
|
+
console.error(`[reset] ${JSON.stringify(entry)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Return a snapshot of the current reset diagnostics for tests.
|
|
27
|
+
*
|
|
28
|
+
* @returns Recorded reset diagnostics
|
|
29
|
+
*/
|
|
30
|
+
export function getResetDiagnosticsForTests() {
|
|
31
|
+
return [...diagnostics];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Clear captured reset diagnostics between tests.
|
|
35
|
+
*
|
|
36
|
+
* @returns Nothing
|
|
37
|
+
*/
|
|
38
|
+
export function resetResetDiagnosticsForTests() {
|
|
39
|
+
diagnostics.length = 0;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=reset-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset-diagnostics.js","sourceRoot":"","sources":["../src/reset-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAyDlC,MAAM,WAAW,GAA2B,EAAE,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA2B;IAChE,MAAM,KAAK,GAAyB,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACxE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,WAAW,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAChD,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B;IAC1C,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B;IAC5C,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/sdk.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CreateAgentSessionOptions, type CreateAgentSessionResult, type ExtensionFactory, type PromptTemplate, type Skill } from "@mariozechner/pi-coding-agent";
|
|
1
|
+
import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSessionRuntime, type ExtensionFactory, type PromptTemplate, type Skill } from "@mariozechner/pi-coding-agent";
|
|
2
2
|
import { type TallowTelemetryConfig, type TelemetryHandle } from "./otel.js";
|
|
3
3
|
import { type ResolvedPlugin, type TallowExtensionManifest } from "./plugins.js";
|
|
4
4
|
import { type ProjectTrustStatus } from "./project-trust.js";
|
|
@@ -238,8 +238,10 @@ export declare function applyToolResultRetentionToMessages(messages: unknown[],
|
|
|
238
238
|
*/
|
|
239
239
|
export declare function resolveSharedSkillsDirs(globalSettings: Record<string, unknown> | undefined): string[];
|
|
240
240
|
export interface TallowSession {
|
|
241
|
-
/**
|
|
242
|
-
|
|
241
|
+
/** Runtime host used by interactive/print/rpc modes and session replacement flows. */
|
|
242
|
+
runtime: Awaited<ReturnType<typeof createAgentSessionRuntime>>;
|
|
243
|
+
/** The current underlying AgentSession. This getter tracks runtime.session. */
|
|
244
|
+
readonly session: CreateAgentSessionResult["session"];
|
|
243
245
|
/** Extension loading results */
|
|
244
246
|
extensions: CreateAgentSessionResult["extensionsResult"];
|
|
245
247
|
/** Model fallback message (if session model couldn't be restored) */
|
|
@@ -319,24 +321,6 @@ export declare function resolveExtensionSelectors(selectors: readonly string[] |
|
|
|
319
321
|
cwd?: string;
|
|
320
322
|
catalog?: readonly BundledExtensionCatalogEntry[];
|
|
321
323
|
}): string[];
|
|
322
|
-
/**
|
|
323
|
-
* Create a Tallow session with all bundled extensions, skills, prompts,
|
|
324
|
-
* and agents pre-loaded. This is the main SDK entry point.
|
|
325
|
-
*
|
|
326
|
-
* ```typescript
|
|
327
|
-
* import { createTallowSession } from "tallow";
|
|
328
|
-
*
|
|
329
|
-
* const { session } = await createTallowSession();
|
|
330
|
-
*
|
|
331
|
-
* session.subscribe((event) => {
|
|
332
|
-
* if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
|
|
333
|
-
* process.stdout.write(event.assistantMessageEvent.delta);
|
|
334
|
-
* }
|
|
335
|
-
* });
|
|
336
|
-
*
|
|
337
|
-
* await session.prompt("Fix the failing tests");
|
|
338
|
-
* ```
|
|
339
|
-
*/
|
|
340
324
|
export declare function createTallowSession(options?: TallowSessionOptions): Promise<TallowSession>;
|
|
341
325
|
/**
|
|
342
326
|
* Collect plugin specs from settings files and CLI options.
|
package/dist/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAGA,OAAO,EAEN,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { basename, delimiter, dirname, join, resolve, sep } from "node:path";
|
|
4
|
-
import { bashTool, codingTools, createAgentSession, createEventBus, DefaultPackageManager, DefaultResourceLoader, editTool, findTool, grepTool, lsTool, ModelRegistry, readOnlyTools, readTool, SessionManager, SettingsManager, writeTool, } from "@mariozechner/pi-coding-agent";
|
|
5
|
-
import * as PiTui from "@mariozechner/pi-tui";
|
|
4
|
+
import { bashTool, codingTools, createAgentSession, createAgentSessionRuntime, createEventBus, DefaultPackageManager, DefaultResourceLoader, editTool, findTool, grepTool, lsTool, ModelRegistry, readOnlyTools, readTool, SessionManager, SettingsManager, writeTool, } from "@mariozechner/pi-coding-agent";
|
|
6
5
|
import { atomicWriteFileSync } from "./atomic-write.js";
|
|
7
6
|
import { createSecureAuthStorage, resolveRuntimeApiKeyFromEnv } from "./auth-hardening.js";
|
|
8
7
|
import { applyAgentSessionCompactionCancelPatch } from "./compaction-cancel-patch.js";
|
|
@@ -10,6 +9,7 @@ import { BUNDLED, bootstrap, getRuntimeTallowHome, resolveOpSecrets, TALLOW_VERS
|
|
|
10
9
|
import { applyInteractiveModeStaleUiPatch } from "./interactive-mode-patch.js";
|
|
11
10
|
import { applyKnownModelMetadataOverrides } from "./model-metadata-overrides.js";
|
|
12
11
|
import { createTelemetryHandle, extractTraceContextFromEnv, sessionAttributes, TELEMETRY_API_CHANNELS, } from "./otel.js";
|
|
12
|
+
import { applyPiTuiPatches } from "./pi-tui-patch.js";
|
|
13
13
|
import { cleanupOrphanPids } from "./pid-manager.js";
|
|
14
14
|
import { extractClaudePluginResources, readPluginManifest, resolvePlugins, } from "./plugins.js";
|
|
15
15
|
import { applyProjectTrustContextToEnv, resolveProjectTrust, trustProject, untrustProject, } from "./project-trust.js";
|
|
@@ -967,14 +967,41 @@ function applyExtensionStartupPolicies(base, options) {
|
|
|
967
967
|
* await session.prompt("Fix the failing tests");
|
|
968
968
|
* ```
|
|
969
969
|
*/
|
|
970
|
+
/**
|
|
971
|
+
* Apply tallow runtime setting overrides that must be consistent across initial
|
|
972
|
+
* startup and runtime-backed session recreation.
|
|
973
|
+
*
|
|
974
|
+
* @param settingsManager - Settings manager to mutate
|
|
975
|
+
* @param runtimeSettings - Optional runtime settings overrides from SDK/CLI
|
|
976
|
+
* @param trustStatus - Effective project trust status for the target cwd
|
|
977
|
+
* @returns Nothing
|
|
978
|
+
*/
|
|
979
|
+
function applySessionSettingsOverrides(settingsManager, runtimeSettings, trustStatus) {
|
|
980
|
+
const global = settingsManager.getGlobalSettings();
|
|
981
|
+
const project = settingsManager.getProjectSettings();
|
|
982
|
+
if (global.quietStartup === undefined && project.quietStartup === undefined) {
|
|
983
|
+
settingsManager.applyOverrides({ quietStartup: true });
|
|
984
|
+
}
|
|
985
|
+
if (runtimeSettings) {
|
|
986
|
+
settingsManager.applyOverrides(runtimeSettings);
|
|
987
|
+
}
|
|
988
|
+
if (trustStatus !== "trusted") {
|
|
989
|
+
const globalPackages = settingsManager.getGlobalSettings().packages;
|
|
990
|
+
settingsManager.applyOverrides({
|
|
991
|
+
packages: (Array.isArray(globalPackages) ? globalPackages : []),
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
}
|
|
970
995
|
export async function createTallowSession(options = {}) {
|
|
971
996
|
const startupProfile = normalizeStartupProfile(options.startupProfile);
|
|
972
997
|
const startupTiming = createStartupTimingLogger(startupProfile);
|
|
973
998
|
const createSessionStartedAtMs = Date.now();
|
|
999
|
+
const callerCwd = process.cwd();
|
|
974
1000
|
// Ensure env is configured before any framework internals resolve paths
|
|
975
1001
|
bootstrap();
|
|
976
1002
|
ensureTallowHome(startupProfile);
|
|
977
1003
|
if (startupProfile === "interactive") {
|
|
1004
|
+
await applyPiTuiPatches();
|
|
978
1005
|
await applyInteractiveModeStaleUiPatch();
|
|
979
1006
|
}
|
|
980
1007
|
await applyAgentSessionCompactionCancelPatch();
|
|
@@ -1015,26 +1042,7 @@ export async function createTallowSession(options = {}) {
|
|
|
1015
1042
|
}
|
|
1016
1043
|
// ── Settings ─────────────────────────────────────────────────────────────
|
|
1017
1044
|
const settingsManager = SettingsManager.create(cwd, tallowHome);
|
|
1018
|
-
|
|
1019
|
-
// header, so the built-in keybinding list and resource listing are redundant.
|
|
1020
|
-
// Only apply when the user/project settings haven't explicitly set the value.
|
|
1021
|
-
{
|
|
1022
|
-
const global = settingsManager.getGlobalSettings();
|
|
1023
|
-
const project = settingsManager.getProjectSettings();
|
|
1024
|
-
if (global.quietStartup === undefined && project.quietStartup === undefined) {
|
|
1025
|
-
settingsManager.applyOverrides({ quietStartup: true });
|
|
1026
|
-
}
|
|
1027
|
-
}
|
|
1028
|
-
// Runtime overrides from options.settings come last so they win.
|
|
1029
|
-
if (options.settings) {
|
|
1030
|
-
settingsManager.applyOverrides(options.settings);
|
|
1031
|
-
}
|
|
1032
|
-
if (projectTrust.status !== "trusted") {
|
|
1033
|
-
const globalPackages = settingsManager.getGlobalSettings().packages;
|
|
1034
|
-
settingsManager.applyOverrides({
|
|
1035
|
-
packages: (Array.isArray(globalPackages) ? globalPackages : []),
|
|
1036
|
-
});
|
|
1037
|
-
}
|
|
1045
|
+
applySessionSettingsOverrides(settingsManager, options.settings, projectTrust.status);
|
|
1038
1046
|
const toolResultRetentionPolicy = resolveToolResultRetentionPolicy({
|
|
1039
1047
|
globalSettings: settingsManager.getGlobalSettings(),
|
|
1040
1048
|
projectSettings: settingsManager.getProjectSettings(),
|
|
@@ -1143,9 +1151,6 @@ export async function createTallowSession(options = {}) {
|
|
|
1143
1151
|
// ── Package AGENTS.md loading ────────────────────────────────────────────
|
|
1144
1152
|
// Packages contribute extensions, skills, prompts, themes — but the framework
|
|
1145
1153
|
// doesn't load AGENTS.md from packages. Use agentsFilesOverride to inject them.
|
|
1146
|
-
const packageAgentsFiles = loadAgentsFilesFromPackages(settingsManager, cwd);
|
|
1147
|
-
const projectExtensionsDir = resolve(cwd, ".tallow", "extensions");
|
|
1148
|
-
const shouldBlockProjectExtensions = projectTrust.status !== "trusted";
|
|
1149
1154
|
if (projectTrust.status !== "trusted") {
|
|
1150
1155
|
console.error(projectTrust.status === "stale_fingerprint"
|
|
1151
1156
|
? "\x1b[33m⚠ Project trust is stale — repo-controlled execution surfaces are blocked until /trust-project\x1b[0m"
|
|
@@ -1153,72 +1158,137 @@ export async function createTallowSession(options = {}) {
|
|
|
1153
1158
|
}
|
|
1154
1159
|
const dedupedExtensionPaths = [...new Set(additionalExtensionPaths)];
|
|
1155
1160
|
const disabledExtensionNames = new Set(options.disabledExtensions ?? []);
|
|
1156
|
-
const shouldApplyExtensionStartupPolicies = shouldBlockProjectExtensions ||
|
|
1157
|
-
startupProfile === "headless" ||
|
|
1158
|
-
disabledExtensionNames.size > 0;
|
|
1159
1161
|
const explicitToolRestrictionNames = resolveExplicitToolRestrictionNames(options);
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1162
|
+
/**
|
|
1163
|
+
* Create a runtime-backed session for the given cwd/session target.
|
|
1164
|
+
*
|
|
1165
|
+
* @param runtimeCwd - Effective session cwd
|
|
1166
|
+
* @param runtimeSessionManager - Session manager to attach
|
|
1167
|
+
* @param sessionStartEvent - Optional lifecycle metadata for replacement flows
|
|
1168
|
+
* @returns Created session, extension load result, and runtime services
|
|
1169
|
+
*/
|
|
1170
|
+
const createRuntime = async ({ cwd: runtimeCwd, sessionManager: runtimeSessionManager, sessionStartEvent, }) => {
|
|
1171
|
+
const runtimeProjectTrust = resolveProjectTrust(runtimeCwd);
|
|
1172
|
+
applyProjectTrustContextToEnv(runtimeProjectTrust);
|
|
1173
|
+
const runtimeSettingsManager = SettingsManager.create(runtimeCwd, tallowHome);
|
|
1174
|
+
applySessionSettingsOverrides(runtimeSettingsManager, options.settings, runtimeProjectTrust.status);
|
|
1175
|
+
const runtimePackageAgentsFiles = loadAgentsFilesFromPackages(runtimeSettingsManager, runtimeCwd);
|
|
1176
|
+
const runtimeProjectExtensionsDir = resolve(runtimeCwd, ".tallow", "extensions");
|
|
1177
|
+
const runtimeShouldBlockProjectExtensions = runtimeProjectTrust.status !== "trusted";
|
|
1178
|
+
const runtimeShouldApplyExtensionStartupPolicies = runtimeShouldBlockProjectExtensions ||
|
|
1179
|
+
startupProfile === "headless" ||
|
|
1180
|
+
disabledExtensionNames.size > 0;
|
|
1181
|
+
const runtimeLoader = new DefaultResourceLoader({
|
|
1182
|
+
cwd: runtimeCwd,
|
|
1183
|
+
agentDir: tallowHome,
|
|
1184
|
+
settingsManager: runtimeSettingsManager,
|
|
1185
|
+
eventBus,
|
|
1186
|
+
additionalExtensionPaths: dedupedExtensionPaths,
|
|
1187
|
+
additionalSkillPaths,
|
|
1188
|
+
additionalPromptTemplatePaths: additionalPromptPaths,
|
|
1189
|
+
additionalThemePaths,
|
|
1190
|
+
extensionFactories: [
|
|
1191
|
+
createRebrandSystemPromptExtension(contextBudgetPolicy),
|
|
1192
|
+
createToolResultRetentionExtension(toolResultRetentionPolicy, contextBudgetPolicy),
|
|
1193
|
+
createContextBudgetPlannerExtension(contextBudgetPolicy),
|
|
1194
|
+
detectOutputTruncation,
|
|
1195
|
+
createProjectTrustExtension(runtimeCwd, runtimeProjectTrust),
|
|
1196
|
+
createTelemetryExtension(telemetry, runtimeCwd),
|
|
1197
|
+
...(explicitToolRestrictionNames
|
|
1198
|
+
? [createExplicitToolRestrictionExtension(explicitToolRestrictionNames)]
|
|
1199
|
+
: []),
|
|
1200
|
+
...(options.extensionFactories ?? []),
|
|
1201
|
+
],
|
|
1202
|
+
noExtensions: extensionsOnly,
|
|
1203
|
+
extensionsOverride: runtimeShouldApplyExtensionStartupPolicies
|
|
1204
|
+
? (base) => applyExtensionStartupPolicies(base, {
|
|
1205
|
+
blockProjectExtensions: runtimeShouldBlockProjectExtensions,
|
|
1206
|
+
disabledExtensionNames,
|
|
1207
|
+
projectExtensionsDir: runtimeProjectExtensionsDir,
|
|
1208
|
+
startupProfile,
|
|
1209
|
+
})
|
|
1210
|
+
: undefined,
|
|
1211
|
+
systemPromptOverride: options.systemPrompt ? () => options.systemPrompt : undefined,
|
|
1212
|
+
appendSystemPromptOverride: options.appendSystemPrompt
|
|
1213
|
+
? (base) => {
|
|
1214
|
+
const append = options.appendSystemPrompt;
|
|
1215
|
+
return append ? [...base, append] : base;
|
|
1216
|
+
}
|
|
1217
|
+
: undefined,
|
|
1218
|
+
agentsFilesOverride: runtimePackageAgentsFiles.length > 0
|
|
1219
|
+
? (base) => ({
|
|
1220
|
+
agentsFiles: [...base.agentsFiles, ...runtimePackageAgentsFiles],
|
|
1221
|
+
})
|
|
1222
|
+
: undefined,
|
|
1223
|
+
skillsOverride: (base) => {
|
|
1224
|
+
const normalized = normalizeSkillNames(base);
|
|
1225
|
+
const extra = options.additionalSkills;
|
|
1214
1226
|
return {
|
|
1215
|
-
|
|
1216
|
-
diagnostics:
|
|
1227
|
+
skills: extra ? [...normalized.skills, ...extra] : normalized.skills,
|
|
1228
|
+
diagnostics: normalized.diagnostics,
|
|
1217
1229
|
};
|
|
1230
|
+
},
|
|
1231
|
+
promptsOverride: options.additionalPrompts
|
|
1232
|
+
? (base) => {
|
|
1233
|
+
const extra = options.additionalPrompts;
|
|
1234
|
+
return {
|
|
1235
|
+
prompts: extra ? [...base.prompts, ...extra] : base.prompts,
|
|
1236
|
+
diagnostics: base.diagnostics,
|
|
1237
|
+
};
|
|
1238
|
+
}
|
|
1239
|
+
: undefined,
|
|
1240
|
+
});
|
|
1241
|
+
await runtimeLoader.reload();
|
|
1242
|
+
applySessionSettingsOverrides(runtimeSettingsManager, options.settings, runtimeProjectTrust.status);
|
|
1243
|
+
let resolvedModel = options.model;
|
|
1244
|
+
if (!resolvedModel && options.provider) {
|
|
1245
|
+
const modelId = options.modelId ?? runtimeSettingsManager.getDefaultModel();
|
|
1246
|
+
if (modelId) {
|
|
1247
|
+
resolvedModel = modelRegistry.find(options.provider, modelId) ?? undefined;
|
|
1248
|
+
if (!resolvedModel) {
|
|
1249
|
+
throw new Error(`Model ${options.provider}/${modelId} not found`);
|
|
1250
|
+
}
|
|
1218
1251
|
}
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1252
|
+
else {
|
|
1253
|
+
const available = modelRegistry.getAll().filter((m) => m.provider === options.provider);
|
|
1254
|
+
if (available.length === 0) {
|
|
1255
|
+
throw new Error(`No models found for provider "${options.provider}"`);
|
|
1256
|
+
}
|
|
1257
|
+
resolvedModel = available[0];
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
const result = await createAgentSession({
|
|
1261
|
+
cwd: runtimeCwd,
|
|
1262
|
+
agentDir: tallowHome,
|
|
1263
|
+
model: resolvedModel,
|
|
1264
|
+
thinkingLevel: options.thinkingLevel,
|
|
1265
|
+
authStorage,
|
|
1266
|
+
modelRegistry,
|
|
1267
|
+
resourceLoader: runtimeLoader,
|
|
1268
|
+
sessionManager: runtimeSessionManager,
|
|
1269
|
+
settingsManager: runtimeSettingsManager,
|
|
1270
|
+
tools: options.tools,
|
|
1271
|
+
customTools: options.customTools,
|
|
1272
|
+
sessionStartEvent,
|
|
1273
|
+
});
|
|
1274
|
+
if (explicitToolRestrictionNames) {
|
|
1275
|
+
const sessionWithToolControl = result.session;
|
|
1276
|
+
sessionWithToolControl.setActiveToolsByName?.(explicitToolRestrictionNames);
|
|
1277
|
+
}
|
|
1278
|
+
return {
|
|
1279
|
+
...result,
|
|
1280
|
+
diagnostics: [],
|
|
1281
|
+
services: {
|
|
1282
|
+
agentDir: tallowHome,
|
|
1283
|
+
authStorage,
|
|
1284
|
+
cwd: runtimeCwd,
|
|
1285
|
+
diagnostics: [],
|
|
1286
|
+
modelRegistry,
|
|
1287
|
+
resourceLoader: runtimeLoader,
|
|
1288
|
+
settingsManager: runtimeSettingsManager,
|
|
1289
|
+
},
|
|
1290
|
+
};
|
|
1291
|
+
};
|
|
1222
1292
|
// ── Session Manager ──────────────────────────────────────────────────────
|
|
1223
1293
|
let sessionManager;
|
|
1224
1294
|
const sessionOpt = options.session ?? { type: "new" };
|
|
@@ -1259,49 +1329,35 @@ export async function createTallowSession(options = {}) {
|
|
|
1259
1329
|
break;
|
|
1260
1330
|
}
|
|
1261
1331
|
}
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
resolvedModel = modelRegistry.find(options.provider, modelId) ?? undefined;
|
|
1268
|
-
if (!resolvedModel) {
|
|
1269
|
-
throw new Error(`Model ${options.provider}/${modelId} not found`);
|
|
1270
|
-
}
|
|
1271
|
-
}
|
|
1272
|
-
else {
|
|
1273
|
-
// Provider without model: find any available model for this provider
|
|
1274
|
-
const available = modelRegistry.getAll().filter((m) => m.provider === options.provider);
|
|
1275
|
-
if (available.length === 0) {
|
|
1276
|
-
throw new Error(`No models found for provider "${options.provider}"`);
|
|
1277
|
-
}
|
|
1278
|
-
resolvedModel = available[0];
|
|
1332
|
+
const initialSessionStartEvent = sessionOpt.type === "continue" || sessionOpt.type === "open" || sessionOpt.type === "resume"
|
|
1333
|
+
? {
|
|
1334
|
+
type: "session_start",
|
|
1335
|
+
reason: "resume",
|
|
1336
|
+
previousSessionFile: sessionManager.getSessionFile(),
|
|
1279
1337
|
}
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1338
|
+
: undefined;
|
|
1339
|
+
const runtime = await createAgentSessionRuntime(({ cwd: runtimeCwd, sessionManager: runtimeSessionManager, sessionStartEvent }) => createRuntime({
|
|
1340
|
+
cwd: runtimeCwd,
|
|
1341
|
+
sessionManager: runtimeSessionManager,
|
|
1342
|
+
sessionStartEvent,
|
|
1343
|
+
}), {
|
|
1283
1344
|
cwd,
|
|
1284
1345
|
agentDir: tallowHome,
|
|
1285
|
-
model: resolvedModel,
|
|
1286
|
-
thinkingLevel: options.thinkingLevel,
|
|
1287
|
-
authStorage,
|
|
1288
|
-
modelRegistry,
|
|
1289
|
-
resourceLoader: loader,
|
|
1290
1346
|
sessionManager,
|
|
1291
|
-
|
|
1292
|
-
tools: options.tools,
|
|
1293
|
-
customTools: options.customTools,
|
|
1347
|
+
sessionStartEvent: initialSessionStartEvent,
|
|
1294
1348
|
});
|
|
1295
|
-
if (
|
|
1296
|
-
|
|
1297
|
-
sessionWithToolControl.setActiveToolsByName?.(explicitToolRestrictionNames);
|
|
1349
|
+
if (process.cwd() !== callerCwd) {
|
|
1350
|
+
process.chdir(callerCwd);
|
|
1298
1351
|
}
|
|
1299
1352
|
startupTiming.mark("create-session", createSessionStartedAtMs);
|
|
1300
|
-
instrumentSessionStartupTimings(
|
|
1353
|
+
instrumentSessionStartupTimings(runtime.session, startupTiming);
|
|
1301
1354
|
return {
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1355
|
+
runtime,
|
|
1356
|
+
get session() {
|
|
1357
|
+
return runtime.session;
|
|
1358
|
+
},
|
|
1359
|
+
extensions: runtime.services.resourceLoader.getExtensions(),
|
|
1360
|
+
modelFallbackMessage: runtime.modelFallbackMessage,
|
|
1305
1361
|
version: TALLOW_VERSION,
|
|
1306
1362
|
extensionOverrides,
|
|
1307
1363
|
resolvedPlugins,
|
|
@@ -1679,29 +1735,6 @@ function createRebrandSystemPromptExtension(budgetPolicy) {
|
|
|
1679
1735
|
});
|
|
1680
1736
|
};
|
|
1681
1737
|
}
|
|
1682
|
-
/**
|
|
1683
|
-
* Injects file paths into Image components for clickable OSC 8 links.
|
|
1684
|
-
* When the read tool returns an image, sets the pending file path so
|
|
1685
|
-
* the next Image constructor picks it up automatically.
|
|
1686
|
-
*
|
|
1687
|
-
* @param pi - Extension API
|
|
1688
|
-
*/
|
|
1689
|
-
function injectImageFilePaths(pi) {
|
|
1690
|
-
pi.on("tool_result", async (event) => {
|
|
1691
|
-
if (event.toolName !== "read")
|
|
1692
|
-
return;
|
|
1693
|
-
const hasImage = event.content?.some((c) => c.type === "image");
|
|
1694
|
-
if (hasImage && event.input?.path) {
|
|
1695
|
-
const filePath = resolve(String(event.input.path));
|
|
1696
|
-
// pi-tui >= 0.55 may not expose this helper; skip injection when unavailable.
|
|
1697
|
-
const maybeSetNextImageFilePath = PiTui
|
|
1698
|
-
.setNextImageFilePath;
|
|
1699
|
-
if (typeof maybeSetNextImageFilePath === "function") {
|
|
1700
|
-
maybeSetNextImageFilePath(filePath);
|
|
1701
|
-
}
|
|
1702
|
-
}
|
|
1703
|
-
});
|
|
1704
|
-
}
|
|
1705
1738
|
/**
|
|
1706
1739
|
* Create a built-in extension that summarizes oversized historical tool results.
|
|
1707
1740
|
*
|
|
@@ -1897,7 +1930,7 @@ function truncateTextToBytes(text, maxBytes) {
|
|
|
1897
1930
|
* message content and allocates a budget envelope for each one, keyed
|
|
1898
1931
|
* by toolCallId. Envelopes are single-use (consumed via the API) and
|
|
1899
1932
|
* automatically cleaned up on turn_end, agent_end, session_before_switch,
|
|
1900
|
-
* and
|
|
1933
|
+
* and post-transition session_start events.
|
|
1901
1934
|
*
|
|
1902
1935
|
* @param budgetPolicy - Resolved context-budget policy
|
|
1903
1936
|
* @returns Extension factory
|
|
@@ -2003,6 +2036,7 @@ function createContextBudgetPlannerExtension(budgetPolicy) {
|
|
|
2003
2036
|
},
|
|
2004
2037
|
};
|
|
2005
2038
|
pi.on("session_start", async () => {
|
|
2039
|
+
clearEnvelopes();
|
|
2006
2040
|
publishBudgetApi();
|
|
2007
2041
|
});
|
|
2008
2042
|
pi.events.on(CONTEXT_BUDGET_API_CHANNELS.budgetApiRequest, () => {
|
|
@@ -2017,9 +2051,6 @@ function createContextBudgetPlannerExtension(budgetPolicy) {
|
|
|
2017
2051
|
pi.on("session_before_switch", async () => {
|
|
2018
2052
|
clearEnvelopes();
|
|
2019
2053
|
});
|
|
2020
|
-
pi.on("session_switch", async () => {
|
|
2021
|
-
clearEnvelopes();
|
|
2022
|
-
});
|
|
2023
2054
|
};
|
|
2024
2055
|
}
|
|
2025
2056
|
/**
|