@askalf/deepdive 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -0
- package/dist/agent.d.ts +11 -5
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +44 -9
- package/dist/agent.js.map +1 -1
- package/dist/cli.d.ts +11 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +244 -10
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -3
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +10 -0
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +12 -0
- package/dist/llm.js.map +1 -1
- package/dist/pricing.d.ts +23 -0
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +31 -0
- package/dist/pricing.js.map +1 -1
- package/dist/sessions.d.ts +44 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +165 -0
- package/dist/sessions.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACL,QAAQ,GAMT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,GAGd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAyB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,oBAAoB,GAIrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,YAAY,EACZ,cAAc,EACd,OAAO,EACP,WAAW,EACX,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,GAIvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,2BAA2B,EAC3B,wBAAwB,GAGzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,SAAS,GAGV,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,eAAe,GAGhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,OAAO,GAQR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,uBAAuB,GAIxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACL,QAAQ,GAMT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,aAAa,GAGd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,oBAAoB,EACpB,WAAW,GAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAyC,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,cAAc,EAAyB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,sBAAsB,EACtB,oBAAoB,GAIrB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAsB,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,KAAK,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EACT,YAAY,EACZ,cAAc,EACd,OAAO,EACP,WAAW,EACX,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,GAIvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,2BAA2B,EAC3B,wBAAwB,GAGzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,SAAS,GAGV,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,eAAe,GAGhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GAId,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,OAAO,GAQR,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,MAAM,EACN,iBAAiB,EACjB,uBAAuB,GAIxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GAKjB,MAAM,aAAa,CAAC"}
|
package/dist/llm.d.ts
CHANGED
|
@@ -8,6 +8,16 @@ export interface LLMConfig {
|
|
|
8
8
|
maxAttempts?: number;
|
|
9
9
|
apiFormat?: ApiFormat;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Return an LLMConfig identical to `base` except `model` is swapped to
|
|
13
|
+
* the provided value (v0.10.0 — per-stage model overrides). Pure;
|
|
14
|
+
* defensive shallow-copy so callers can mutate the result safely.
|
|
15
|
+
*
|
|
16
|
+
* The base config carries auth, base URL, wire format, timeouts — all
|
|
17
|
+
* shared across stages. Only `model` differs per phase, so this is the
|
|
18
|
+
* minimum useful surface for the override.
|
|
19
|
+
*/
|
|
20
|
+
export declare function withModel(base: LLMConfig, model: string): LLMConfig;
|
|
11
21
|
export interface LLMMessage {
|
|
12
22
|
role: "user" | "assistant";
|
|
13
23
|
content: string;
|
package/dist/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAaA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aAEd,MAAM,EAAE,MAAM;gBAFd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,EACC,MAAM,GAAE,MAAW;IAKrC,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAC9C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,UAAU,EAAE,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAwEpB"}
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAaA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAEnE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aAEd,MAAM,EAAE,MAAM;gBAFd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM,EACC,MAAM,GAAE,MAAW;IAKrC,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,eAAO,MAAM,sBAAsB,SAAU,CAAC;AAC9C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,UAAU,EAAE,EACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,CAwEpB"}
|
package/dist/llm.js
CHANGED
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
import { trimTrailingSlashes } from "./url-util.js";
|
|
12
12
|
import { retry } from "./retry.js";
|
|
13
13
|
import { authHeadersFor, detectApiFormat, fromOpenAIResponse, pathFor, toOpenAIRequest, } from "./llm-format.js";
|
|
14
|
+
/**
|
|
15
|
+
* Return an LLMConfig identical to `base` except `model` is swapped to
|
|
16
|
+
* the provided value (v0.10.0 — per-stage model overrides). Pure;
|
|
17
|
+
* defensive shallow-copy so callers can mutate the result safely.
|
|
18
|
+
*
|
|
19
|
+
* The base config carries auth, base URL, wire format, timeouts — all
|
|
20
|
+
* shared across stages. Only `model` differs per phase, so this is the
|
|
21
|
+
* minimum useful surface for the override.
|
|
22
|
+
*/
|
|
23
|
+
export function withModel(base, model) {
|
|
24
|
+
return { ...base, model };
|
|
25
|
+
}
|
|
14
26
|
export class LLMError extends Error {
|
|
15
27
|
status;
|
|
16
28
|
detail;
|
package/dist/llm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,iDAAiD;AACjD,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,uDAAuD;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,OAAO,EACP,eAAe,GAGhB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
|
package/dist/pricing.d.ts
CHANGED
|
@@ -21,6 +21,29 @@ export declare function priceFor(model: string, env?: Record<string, string | un
|
|
|
21
21
|
export declare function estimateCost(usage: TokenUsage & {
|
|
22
22
|
calls: number;
|
|
23
23
|
}, model: string, env?: Record<string, string | undefined>): CostEstimate;
|
|
24
|
+
/**
|
|
25
|
+
* Multi-model cost estimate (v0.10.0).
|
|
26
|
+
*
|
|
27
|
+
* Sums `estimateCost` across a per-model usage map — used when the run
|
|
28
|
+
* spread requests across models (per-stage model overrides). The aggregate
|
|
29
|
+
* `amountUsd` is the sum of priced costs. `knownModel` is true only when
|
|
30
|
+
* **every** model with non-zero usage is priced (known table entry or
|
|
31
|
+
* env-var override). Unknown models contribute $0 (same as the single-
|
|
32
|
+
* model case) and flip `knownModel` to false; the CLI renders `$?` in
|
|
33
|
+
* that situation rather than understating the bill.
|
|
34
|
+
*
|
|
35
|
+
* `byModel` retains the per-model breakdown so the CLI can render a
|
|
36
|
+
* multi-line cost summary when more than one model was used.
|
|
37
|
+
*/
|
|
38
|
+
export interface MultiModelCostEstimate extends CostEstimate {
|
|
39
|
+
byModel: Array<{
|
|
40
|
+
model: string;
|
|
41
|
+
estimate: CostEstimate;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
export declare function estimateCostMultiModel(usageByModel: Record<string, TokenUsage & {
|
|
45
|
+
calls: number;
|
|
46
|
+
}>, env?: Record<string, string | undefined>): MultiModelCostEstimate;
|
|
24
47
|
export declare function formatCostLine(estimate: CostEstimate, model: string): string;
|
|
25
48
|
export declare function looksLikeDario(baseUrl: string): boolean;
|
|
26
49
|
export declare function formatUsd(amount: number): string;
|
package/dist/pricing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAIlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAIpD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAK/C,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAK9D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,UAAU,GAAG,SAAS,CAUxB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,YAAY,CAqBd;AAOD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AASD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhD;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C;AAID,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAMzE"}
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AASD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAIlD,CAAC;AAEF,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAIpD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAK/C,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAK9D,wBAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,UAAU,GAAG,SAAS,CAUxB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,YAAY,CAqBd;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,sBAAsB,CA8BxB;AAOD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AASD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhD;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9C;AAID,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAMzE"}
|
package/dist/pricing.js
CHANGED
|
@@ -68,6 +68,37 @@ export function estimateCost(usage, model, env) {
|
|
|
68
68
|
calls: usage.calls,
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
+
export function estimateCostMultiModel(usageByModel, env) {
|
|
72
|
+
const byModel = [];
|
|
73
|
+
let totalAmount = 0;
|
|
74
|
+
let totalIn = 0;
|
|
75
|
+
let totalOut = 0;
|
|
76
|
+
let totalCalls = 0;
|
|
77
|
+
let allKnown = true;
|
|
78
|
+
// Stable ordering by model name keeps the rendered cost summary
|
|
79
|
+
// deterministic across runs.
|
|
80
|
+
for (const model of Object.keys(usageByModel).sort()) {
|
|
81
|
+
const usage = usageByModel[model];
|
|
82
|
+
if (!usage || (usage.inputTokens === 0 && usage.outputTokens === 0 && usage.calls === 0))
|
|
83
|
+
continue;
|
|
84
|
+
const est = estimateCost(usage, model, env);
|
|
85
|
+
byModel.push({ model, estimate: est });
|
|
86
|
+
totalAmount += est.amountUsd;
|
|
87
|
+
totalIn += est.inputTokens;
|
|
88
|
+
totalOut += est.outputTokens;
|
|
89
|
+
totalCalls += est.calls;
|
|
90
|
+
if (!est.knownModel)
|
|
91
|
+
allKnown = false;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
amountUsd: totalAmount,
|
|
95
|
+
knownModel: allKnown && byModel.length > 0,
|
|
96
|
+
inputTokens: totalIn,
|
|
97
|
+
outputTokens: totalOut,
|
|
98
|
+
calls: totalCalls,
|
|
99
|
+
byModel,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
71
102
|
// Renders the one-line cost summary for the CLI. Two flavors:
|
|
72
103
|
// ~$0.034 · 12.1k in / 4.2k out · 4 LLM calls · claude-sonnet-4-6
|
|
73
104
|
// $? · 12.1k in / 4.2k out · 4 LLM calls · my-self-hosted
|
package/dist/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Plan } from "./plan.js";
|
|
2
|
+
import type { SourceWithContent } from "./synthesize.js";
|
|
3
|
+
import type { VerificationReport } from "./verify.js";
|
|
4
|
+
import type { CostEstimate } from "./pricing.js";
|
|
5
|
+
import type { RoundTrace } from "./agent.js";
|
|
6
|
+
export interface SessionRecord {
|
|
7
|
+
schema: 1;
|
|
8
|
+
id: string;
|
|
9
|
+
createdAt: number;
|
|
10
|
+
question: string;
|
|
11
|
+
plan: Plan;
|
|
12
|
+
rounds: RoundTrace[];
|
|
13
|
+
sources: SourceWithContent[];
|
|
14
|
+
answer: string;
|
|
15
|
+
verification?: VerificationReport;
|
|
16
|
+
cost: CostEstimate;
|
|
17
|
+
llm: {
|
|
18
|
+
baseUrl: string;
|
|
19
|
+
model: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface SessionMeta {
|
|
23
|
+
id: string;
|
|
24
|
+
createdAt: number;
|
|
25
|
+
question: string;
|
|
26
|
+
sourceCount: number;
|
|
27
|
+
rounds: number;
|
|
28
|
+
model: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SessionStorageOptions {
|
|
31
|
+
dir: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function defaultSessionsDir(env?: Record<string, string | undefined>): string;
|
|
34
|
+
export declare function generateSessionId(now?: Date): string;
|
|
35
|
+
export declare function saveSession(record: SessionRecord, opts: SessionStorageOptions): Promise<string>;
|
|
36
|
+
export declare function loadSession(id: string, opts: SessionStorageOptions): Promise<SessionRecord>;
|
|
37
|
+
export declare function listSessions(opts: SessionStorageOptions): Promise<{
|
|
38
|
+
sessions: SessionMeta[];
|
|
39
|
+
bad: string[];
|
|
40
|
+
}>;
|
|
41
|
+
export declare function resolveSessionId(prefix: string, opts: SessionStorageOptions): Promise<string>;
|
|
42
|
+
export declare function renderSessionsList(metas: SessionMeta[]): string;
|
|
43
|
+
export declare function humanDuration(ms: number): string;
|
|
44
|
+
//# sourceMappingURL=sessions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,CAAC,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;CACb;AAGD,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAEnF;AAMD,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,IAAiB,GAAG,MAAM,CAShE;AAgBD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAOjB;AAGD,wBAAsB,WAAW,CAC/B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAUxB;AAID,wBAAsB,YAAY,CAChC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAiCrD;AAYD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAc/D;AAGD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUhD"}
|
package/dist/sessions.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// Session persistence — every successful agent run is saved to disk so
|
|
2
|
+
// the user can iterate on a question without re-running searches or
|
|
3
|
+
// re-fetching pages. Stored at ~/.deepdive/sessions/<id>.json with
|
|
4
|
+
// atomic .tmp + rename semantics, mirroring the cache module.
|
|
5
|
+
//
|
|
6
|
+
// Schema choice: store the full kept-source content. Yes that means
|
|
7
|
+
// duplication with the page cache, but cache TTLs out (1h default) and
|
|
8
|
+
// sessions are the long-lived record of "what did the agent actually
|
|
9
|
+
// reason over." A 30-day-old session must remain self-contained.
|
|
10
|
+
//
|
|
11
|
+
// Pure I/O at well-named boundaries; the session ID generator and the
|
|
12
|
+
// id-resolver (prefix matching) are pure and unit-testable.
|
|
13
|
+
import { promises as fs } from "node:fs";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
// Default sessions directory. Override with DEEPDIVE_SESSIONS_DIR.
|
|
17
|
+
export function defaultSessionsDir(env) {
|
|
18
|
+
return env?.DEEPDIVE_SESSIONS_DIR ?? join(homedir(), ".deepdive", "sessions");
|
|
19
|
+
}
|
|
20
|
+
// Session ID format: `2026-05-07_HHMMSS_<8-hex>`. Sortable
|
|
21
|
+
// chronologically when listed; the suffix is enough entropy to avoid
|
|
22
|
+
// collisions when multiple sessions land in the same second. Exported
|
|
23
|
+
// for tests.
|
|
24
|
+
export function generateSessionId(now = new Date()) {
|
|
25
|
+
const yyyy = now.getUTCFullYear();
|
|
26
|
+
const mm = pad(now.getUTCMonth() + 1, 2);
|
|
27
|
+
const dd = pad(now.getUTCDate(), 2);
|
|
28
|
+
const hh = pad(now.getUTCHours(), 2);
|
|
29
|
+
const mi = pad(now.getUTCMinutes(), 2);
|
|
30
|
+
const ss = pad(now.getUTCSeconds(), 2);
|
|
31
|
+
const suffix = randomHex(4);
|
|
32
|
+
return `${yyyy}-${mm}-${dd}_${hh}${mi}${ss}_${suffix}`;
|
|
33
|
+
}
|
|
34
|
+
function pad(n, width) {
|
|
35
|
+
return String(n).padStart(width, "0");
|
|
36
|
+
}
|
|
37
|
+
function randomHex(bytes) {
|
|
38
|
+
const arr = new Uint8Array(bytes);
|
|
39
|
+
// crypto is globally available in Node 20+ via web crypto.
|
|
40
|
+
globalThis.crypto.getRandomValues(arr);
|
|
41
|
+
return Array.from(arr, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
42
|
+
}
|
|
43
|
+
// Atomically write a session to disk. The dir is created if missing.
|
|
44
|
+
export async function saveSession(record, opts) {
|
|
45
|
+
await fs.mkdir(opts.dir, { recursive: true });
|
|
46
|
+
const path = join(opts.dir, `${record.id}.json`);
|
|
47
|
+
const tmp = path + ".tmp";
|
|
48
|
+
await fs.writeFile(tmp, JSON.stringify(record, null, 2), "utf-8");
|
|
49
|
+
await fs.rename(tmp, path);
|
|
50
|
+
return path;
|
|
51
|
+
}
|
|
52
|
+
// Loads a session by exact id. Throws if missing or unparsable.
|
|
53
|
+
export async function loadSession(id, opts) {
|
|
54
|
+
const path = join(opts.dir, `${id}.json`);
|
|
55
|
+
const raw = await fs.readFile(path, "utf-8");
|
|
56
|
+
const json = JSON.parse(raw);
|
|
57
|
+
if (json.schema !== 1) {
|
|
58
|
+
throw new Error(`session ${id}: unsupported schema version ${json.schema} (expected 1)`);
|
|
59
|
+
}
|
|
60
|
+
return json;
|
|
61
|
+
}
|
|
62
|
+
// Lists session metadata, newest first. Skips files that don't parse
|
|
63
|
+
// (returns them as warnings via `bad[]` for the caller to surface).
|
|
64
|
+
export async function listSessions(opts) {
|
|
65
|
+
let entries = [];
|
|
66
|
+
try {
|
|
67
|
+
entries = await fs.readdir(opts.dir);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return { sessions: [], bad: [] };
|
|
71
|
+
}
|
|
72
|
+
const sessions = [];
|
|
73
|
+
const bad = [];
|
|
74
|
+
for (const f of entries) {
|
|
75
|
+
if (!f.endsWith(".json"))
|
|
76
|
+
continue;
|
|
77
|
+
if (f.endsWith(".tmp"))
|
|
78
|
+
continue;
|
|
79
|
+
try {
|
|
80
|
+
const raw = await fs.readFile(join(opts.dir, f), "utf-8");
|
|
81
|
+
const r = JSON.parse(raw);
|
|
82
|
+
if (r.schema !== 1) {
|
|
83
|
+
bad.push(f);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
sessions.push({
|
|
87
|
+
id: r.id,
|
|
88
|
+
createdAt: r.createdAt,
|
|
89
|
+
question: r.question,
|
|
90
|
+
sourceCount: r.sources.length,
|
|
91
|
+
rounds: r.rounds.length,
|
|
92
|
+
model: r.llm?.model ?? "(unknown)",
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
bad.push(f);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
sessions.sort((a, b) => b.createdAt - a.createdAt);
|
|
100
|
+
return { sessions, bad };
|
|
101
|
+
}
|
|
102
|
+
// Resolves a partial id (timestamp-prefix shorthand) against the
|
|
103
|
+
// directory. Exported for tests and reuse from the resume path.
|
|
104
|
+
//
|
|
105
|
+
// - "2026-05-07" → matches every session from that day; ambiguous
|
|
106
|
+
// unless exactly one matches
|
|
107
|
+
// - "2026-05-07_103045" → likely unique; resolve if so
|
|
108
|
+
// - exact id → always resolves to itself when the file exists
|
|
109
|
+
//
|
|
110
|
+
// Returns the resolved id or throws with a clear "ambiguous" / "no
|
|
111
|
+
// match" message.
|
|
112
|
+
export async function resolveSessionId(prefix, opts) {
|
|
113
|
+
// Exact match wins, no listing needed.
|
|
114
|
+
try {
|
|
115
|
+
await fs.access(join(opts.dir, `${prefix}.json`));
|
|
116
|
+
return prefix;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* fall through */
|
|
120
|
+
}
|
|
121
|
+
const { sessions } = await listSessions(opts);
|
|
122
|
+
const matches = sessions.filter((s) => s.id.startsWith(prefix));
|
|
123
|
+
if (matches.length === 0) {
|
|
124
|
+
throw new Error(`no session matches "${prefix}" in ${opts.dir}`);
|
|
125
|
+
}
|
|
126
|
+
if (matches.length > 1) {
|
|
127
|
+
const sample = matches
|
|
128
|
+
.slice(0, 5)
|
|
129
|
+
.map((m) => m.id)
|
|
130
|
+
.join("\n ");
|
|
131
|
+
throw new Error(`prefix "${prefix}" is ambiguous (${matches.length} matches); pick one:\n ${sample}`);
|
|
132
|
+
}
|
|
133
|
+
return matches[0].id;
|
|
134
|
+
}
|
|
135
|
+
// Pretty-prints the metadata list for `deepdive sessions ls`. Exported
|
|
136
|
+
// for tests and reuse.
|
|
137
|
+
export function renderSessionsList(metas) {
|
|
138
|
+
if (metas.length === 0) {
|
|
139
|
+
return "(no sessions yet — run `deepdive \"<question>\"` to create one)";
|
|
140
|
+
}
|
|
141
|
+
const lines = [];
|
|
142
|
+
for (const m of metas) {
|
|
143
|
+
const ago = humanDuration(Date.now() - m.createdAt);
|
|
144
|
+
const q = m.question.length > 60 ? m.question.slice(0, 59) + "…" : m.question;
|
|
145
|
+
lines.push(` ${m.id} ${ago.padStart(8)} ${m.sourceCount} src · ${m.rounds} round ${q}`);
|
|
146
|
+
}
|
|
147
|
+
return lines.join("\n");
|
|
148
|
+
}
|
|
149
|
+
// Exported for tests.
|
|
150
|
+
export function humanDuration(ms) {
|
|
151
|
+
if (ms < 0)
|
|
152
|
+
return "future";
|
|
153
|
+
const s = Math.floor(ms / 1000);
|
|
154
|
+
if (s < 60)
|
|
155
|
+
return `${s}s ago`;
|
|
156
|
+
const m = Math.floor(s / 60);
|
|
157
|
+
if (m < 60)
|
|
158
|
+
return `${m}m ago`;
|
|
159
|
+
const h = Math.floor(m / 60);
|
|
160
|
+
if (h < 24)
|
|
161
|
+
return `${h}h ago`;
|
|
162
|
+
const d = Math.floor(h / 24);
|
|
163
|
+
return `${d}d ago`;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askalf/deepdive",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "A local research agent. One command, cited answer. Routes every LLM call through your own proxy (dario, Anthropic-compat, OpenAI-compat). Headless browser + pluggable search + multi-provider LLM — zero hosted dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|