@fly3366/deepjit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/README.zh.md +126 -0
- package/cordis.patch.yml +16 -0
- package/dist/collector.d.ts +31 -0
- package/dist/collector.js +258 -0
- package/dist/collector.js.map +1 -0
- package/dist/compiler/optimize.d.ts +30 -0
- package/dist/compiler/optimize.js +47 -0
- package/dist/compiler/optimize.js.map +1 -0
- package/dist/compiler/tiering.d.ts +22 -0
- package/dist/compiler/tiering.js +20 -0
- package/dist/compiler/tiering.js.map +1 -0
- package/dist/config.d.ts +42 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/feedback.d.ts +43 -0
- package/dist/feedback.js +172 -0
- package/dist/feedback.js.map +1 -0
- package/dist/flow-executor.d.ts +46 -0
- package/dist/flow-executor.js +184 -0
- package/dist/flow-executor.js.map +1 -0
- package/dist/genai.d.ts +27 -0
- package/dist/genai.js +57 -0
- package/dist/genai.js.map +1 -0
- package/dist/i18n.d.ts +40 -0
- package/dist/i18n.js +81 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +170 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics.d.ts +28 -0
- package/dist/metrics.js +68 -0
- package/dist/metrics.js.map +1 -0
- package/dist/miner.d.ts +14 -0
- package/dist/miner.js +93 -0
- package/dist/miner.js.map +1 -0
- package/dist/paths.d.ts +13 -0
- package/dist/paths.js +44 -0
- package/dist/paths.js.map +1 -0
- package/dist/status-tool.d.ts +21 -0
- package/dist/status-tool.js +113 -0
- package/dist/status-tool.js.map +1 -0
- package/dist/store.d.ts +122 -0
- package/dist/store.js +317 -0
- package/dist/store.js.map +1 -0
- package/dist/summarizer.d.ts +102 -0
- package/dist/summarizer.js +472 -0
- package/dist/summarizer.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-executor.js","sourceRoot":"","sources":["../src/flow-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/genai.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry Generative-AI semantic conventions (gen_ai.*) for LLM calls.
|
|
3
|
+
* Attribute names follow the OTel GenAI semconv (experimental but widely
|
|
4
|
+
* adopted), so backends that understand gen_ai.* render rich LLM spans.
|
|
5
|
+
*
|
|
6
|
+
* Emitted through the standard @opentelemetry/api; when dsh-o11y-plugin
|
|
7
|
+
* registers global providers these spans export via OTLP, otherwise no-op.
|
|
8
|
+
*/
|
|
9
|
+
import { type Span } from '@opentelemetry/api';
|
|
10
|
+
/** Record the standard GenAI client token-usage metric (input/output). */
|
|
11
|
+
export declare function recordTokenUsage(model: string, usage: LlmUsage): void;
|
|
12
|
+
export interface LlmSpanInput {
|
|
13
|
+
operation?: string;
|
|
14
|
+
system?: string;
|
|
15
|
+
model: string;
|
|
16
|
+
temperature?: number;
|
|
17
|
+
maxTokens?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface LlmUsage {
|
|
20
|
+
inputTokens?: number;
|
|
21
|
+
outputTokens?: number;
|
|
22
|
+
reasoningTokens?: number;
|
|
23
|
+
}
|
|
24
|
+
/** Start a client span for one LLM request, tagged with gen_ai.* attributes. */
|
|
25
|
+
export declare function startLlmSpan(input: LlmSpanInput): Span;
|
|
26
|
+
/** Finish an LLM span, recording gen_ai usage and error status. */
|
|
27
|
+
export declare function endLlmSpan(span: Span, usage: LlmUsage | undefined, error?: unknown): void;
|
package/dist/genai.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry Generative-AI semantic conventions (gen_ai.*) for LLM calls.
|
|
3
|
+
* Attribute names follow the OTel GenAI semconv (experimental but widely
|
|
4
|
+
* adopted), so backends that understand gen_ai.* render rich LLM spans.
|
|
5
|
+
*
|
|
6
|
+
* Emitted through the standard @opentelemetry/api; when dsh-o11y-plugin
|
|
7
|
+
* registers global providers these spans export via OTLP, otherwise no-op.
|
|
8
|
+
*/
|
|
9
|
+
import { trace, metrics, SpanKind, SpanStatusCode } from '@opentelemetry/api';
|
|
10
|
+
const TRACER = 'deepjit';
|
|
11
|
+
const METER = 'deepjit';
|
|
12
|
+
/** Record the standard GenAI client token-usage metric (input/output). */
|
|
13
|
+
export function recordTokenUsage(model, usage) {
|
|
14
|
+
const meter = metrics.getMeter(METER);
|
|
15
|
+
const hist = meter.createHistogram('gen_ai.client.token.usage', { unit: '{token}' });
|
|
16
|
+
if (usage.inputTokens !== undefined) {
|
|
17
|
+
hist.record(usage.inputTokens, { 'gen_ai.request.model': model, 'gen_ai.token.type': 'input' });
|
|
18
|
+
}
|
|
19
|
+
if (usage.outputTokens !== undefined) {
|
|
20
|
+
hist.record(usage.outputTokens, { 'gen_ai.request.model': model, 'gen_ai.token.type': 'output' });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Start a client span for one LLM request, tagged with gen_ai.* attributes. */
|
|
24
|
+
export function startLlmSpan(input) {
|
|
25
|
+
const tracer = trace.getTracer(TRACER);
|
|
26
|
+
return tracer.startSpan(`chat ${input.model}`, {
|
|
27
|
+
kind: SpanKind.CLIENT,
|
|
28
|
+
attributes: {
|
|
29
|
+
'gen_ai.operation.name': input.operation ?? 'chat',
|
|
30
|
+
'gen_ai.agent.name': 'deepjit',
|
|
31
|
+
'gen_ai.system': input.system ?? 'deepseek',
|
|
32
|
+
'gen_ai.request.model': input.model,
|
|
33
|
+
...(input.temperature !== undefined ? { 'gen_ai.request.temperature': input.temperature } : {}),
|
|
34
|
+
...(input.maxTokens !== undefined ? { 'gen_ai.request.max_tokens': input.maxTokens } : {}),
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Finish an LLM span, recording gen_ai usage and error status. */
|
|
39
|
+
export function endLlmSpan(span, usage, error) {
|
|
40
|
+
if (usage) {
|
|
41
|
+
if (usage.inputTokens !== undefined)
|
|
42
|
+
span.setAttribute('gen_ai.usage.input_tokens', usage.inputTokens);
|
|
43
|
+
if (usage.outputTokens !== undefined)
|
|
44
|
+
span.setAttribute('gen_ai.usage.output_tokens', usage.outputTokens);
|
|
45
|
+
if (usage.reasoningTokens !== undefined)
|
|
46
|
+
span.setAttribute('gen_ai.usage.reasoning_tokens', usage.reasoningTokens);
|
|
47
|
+
}
|
|
48
|
+
if (error) {
|
|
49
|
+
span.recordException(error instanceof Error ? error : new Error(String(error)));
|
|
50
|
+
span.setStatus({ code: SpanStatusCode.ERROR });
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
54
|
+
}
|
|
55
|
+
span.end();
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=genai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genai.js","sourceRoot":"","sources":["../src/genai.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight runtime internationalization for user-facing strings.
|
|
3
|
+
* Documentation defaults to English (README.md) with Chinese in README.zh.md;
|
|
4
|
+
* runtime output follows the configured locale, defaulting to English.
|
|
5
|
+
*
|
|
6
|
+
* Only strings shown to a human (tool results, status output) are localized.
|
|
7
|
+
* Developer logs and model-facing tool descriptions remain English.
|
|
8
|
+
*/
|
|
9
|
+
export type Locale = 'en' | 'zh';
|
|
10
|
+
export type LocalePreference = 'auto' | Locale;
|
|
11
|
+
declare const en: {
|
|
12
|
+
readonly 'status.empty': "No deepjit artifacts yet.";
|
|
13
|
+
readonly 'status.nameRequired': "name is required for {action}";
|
|
14
|
+
readonly 'status.unknown': "unknown artifact \"{name}\"";
|
|
15
|
+
readonly 'status.fileMissing': "artifact \"{name}\" file is missing: {path}";
|
|
16
|
+
readonly 'status.alreadyDisabled': "artifact \"{name}\" is already disabled";
|
|
17
|
+
readonly 'status.alreadyActive': "artifact \"{name}\" is already active";
|
|
18
|
+
readonly 'status.disabled': "disabled \"{name}\"";
|
|
19
|
+
readonly 'status.enabled': "enabled \"{name}\"";
|
|
20
|
+
readonly 'status.deleted': "deleted \"{name}\"";
|
|
21
|
+
readonly 'status.unknownAction': "unknown action \"{action}\"";
|
|
22
|
+
readonly 'flow.unknown': "unknown flow \"{name}\" (deepjit_status list shows available flows)";
|
|
23
|
+
readonly 'flow.disabled': "flow \"{name}\" is disabled";
|
|
24
|
+
readonly 'flow.noSteps': "flow \"{name}\" has no steps";
|
|
25
|
+
readonly 'flow.recursive': "flow \"{name}\" references deepjit's own tools; recursive JIT flows are not allowed";
|
|
26
|
+
};
|
|
27
|
+
export type MessageKey = keyof typeof en;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve and apply the active locale.
|
|
30
|
+
* Priority: explicit preference (non-auto) > dsh-provided locale > environment
|
|
31
|
+
* (LC_ALL/LANG) > English.
|
|
32
|
+
* @param preference - user config override; 'auto' defers to dsh/env.
|
|
33
|
+
* @param dshLocale - locale reported by the harness (e.g. the web client's
|
|
34
|
+
* `locale` settings namespace), when available.
|
|
35
|
+
*/
|
|
36
|
+
export declare function setLocale(preference: LocalePreference, dshLocale?: unknown): void;
|
|
37
|
+
export declare function getLocale(): Locale;
|
|
38
|
+
/** Translate a message key, substituting {param} placeholders. */
|
|
39
|
+
export declare function t(key: MessageKey, params?: Record<string, string>): string;
|
|
40
|
+
export {};
|
package/dist/i18n.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight runtime internationalization for user-facing strings.
|
|
3
|
+
* Documentation defaults to English (README.md) with Chinese in README.zh.md;
|
|
4
|
+
* runtime output follows the configured locale, defaulting to English.
|
|
5
|
+
*
|
|
6
|
+
* Only strings shown to a human (tool results, status output) are localized.
|
|
7
|
+
* Developer logs and model-facing tool descriptions remain English.
|
|
8
|
+
*/
|
|
9
|
+
const en = {
|
|
10
|
+
'status.empty': 'No deepjit artifacts yet.',
|
|
11
|
+
'status.nameRequired': 'name is required for {action}',
|
|
12
|
+
'status.unknown': 'unknown artifact "{name}"',
|
|
13
|
+
'status.fileMissing': 'artifact "{name}" file is missing: {path}',
|
|
14
|
+
'status.alreadyDisabled': 'artifact "{name}" is already disabled',
|
|
15
|
+
'status.alreadyActive': 'artifact "{name}" is already active',
|
|
16
|
+
'status.disabled': 'disabled "{name}"',
|
|
17
|
+
'status.enabled': 'enabled "{name}"',
|
|
18
|
+
'status.deleted': 'deleted "{name}"',
|
|
19
|
+
'status.unknownAction': 'unknown action "{action}"',
|
|
20
|
+
'flow.unknown': 'unknown flow "{name}" (deepjit_status list shows available flows)',
|
|
21
|
+
'flow.disabled': 'flow "{name}" is disabled',
|
|
22
|
+
'flow.noSteps': 'flow "{name}" has no steps',
|
|
23
|
+
'flow.recursive': 'flow "{name}" references deepjit\'s own tools; recursive JIT flows are not allowed',
|
|
24
|
+
};
|
|
25
|
+
const zh = {
|
|
26
|
+
'status.empty': '尚无任何 deepjit 产物。',
|
|
27
|
+
'status.nameRequired': '{action} 操作需要提供 name',
|
|
28
|
+
'status.unknown': '未知产物 "{name}"',
|
|
29
|
+
'status.fileMissing': '产物 "{name}" 的文件缺失:{path}',
|
|
30
|
+
'status.alreadyDisabled': '产物 "{name}" 已处于禁用状态',
|
|
31
|
+
'status.alreadyActive': '产物 "{name}" 已处于启用状态',
|
|
32
|
+
'status.disabled': '已禁用 "{name}"',
|
|
33
|
+
'status.enabled': '已启用 "{name}"',
|
|
34
|
+
'status.deleted': '已删除 "{name}"',
|
|
35
|
+
'status.unknownAction': '未知操作 "{action}"',
|
|
36
|
+
'flow.unknown': '未知流程 "{name}"(可用 deepjit_status 查看已有流程)',
|
|
37
|
+
'flow.disabled': '流程 "{name}" 已被禁用',
|
|
38
|
+
'flow.noSteps': '流程 "{name}" 没有任何步骤',
|
|
39
|
+
'flow.recursive': '流程 "{name}" 引用了 deepjit 自身的工具,不允许递归 JIT 流程',
|
|
40
|
+
};
|
|
41
|
+
let current = 'en';
|
|
42
|
+
function detect() {
|
|
43
|
+
const lang = (process.env.LC_ALL ?? process.env.LANG ?? '').toLowerCase();
|
|
44
|
+
return lang.startsWith('zh') ? 'zh' : 'en';
|
|
45
|
+
}
|
|
46
|
+
function isLocale(value) {
|
|
47
|
+
return value === 'en' || value === 'zh';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve and apply the active locale.
|
|
51
|
+
* Priority: explicit preference (non-auto) > dsh-provided locale > environment
|
|
52
|
+
* (LC_ALL/LANG) > English.
|
|
53
|
+
* @param preference - user config override; 'auto' defers to dsh/env.
|
|
54
|
+
* @param dshLocale - locale reported by the harness (e.g. the web client's
|
|
55
|
+
* `locale` settings namespace), when available.
|
|
56
|
+
*/
|
|
57
|
+
export function setLocale(preference, dshLocale) {
|
|
58
|
+
if (preference !== 'auto') {
|
|
59
|
+
current = preference;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (isLocale(dshLocale)) {
|
|
63
|
+
current = dshLocale;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
current = detect();
|
|
67
|
+
}
|
|
68
|
+
export function getLocale() {
|
|
69
|
+
return current;
|
|
70
|
+
}
|
|
71
|
+
/** Translate a message key, substituting {param} placeholders. */
|
|
72
|
+
export function t(key, params) {
|
|
73
|
+
let text = current === 'zh' ? zh[key] : en[key];
|
|
74
|
+
if (params) {
|
|
75
|
+
for (const [name, value] of Object.entries(params)) {
|
|
76
|
+
text = text.split(`{${name}}`).join(value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return text;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=i18n.js.map
|
package/dist/i18n.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,EAAE,GAAG;IACT,cAAc,EAAE,2BAA2B;IAC3C,qBAAqB,EAAE,+BAA+B;IACtD,gBAAgB,EAAE,2BAA2B;IAC7C,oBAAoB,EAAE,2CAA2C;IACjE,wBAAwB,EAAE,uCAAuC;IACjE,sBAAsB,EAAE,qCAAqC;IAC7D,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,sBAAsB,EAAE,2BAA2B;IACnD,cAAc,EAAE,mEAAmE;IACnF,eAAe,EAAE,2BAA2B;IAC5C,cAAc,EAAE,4BAA4B;IAC5C,gBAAgB,EAAE,oFAAoF;CAC9F,CAAA;AAIV,MAAM,EAAE,GAA+B;IACrC,cAAc,EAAE,kBAAkB;IAClC,qBAAqB,EAAE,sBAAsB;IAC7C,gBAAgB,EAAE,eAAe;IACjC,oBAAoB,EAAE,0BAA0B;IAChD,wBAAwB,EAAE,qBAAqB;IAC/C,sBAAsB,EAAE,qBAAqB;IAC7C,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,cAAc;IAChC,sBAAsB,EAAE,iBAAiB;IACzC,cAAc,EAAE,yCAAyC;IACzD,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,oBAAoB;IACpC,gBAAgB,EAAE,4CAA4C;CAC/D,CAAA;AAED,IAAI,OAAO,GAAW,IAAI,CAAA;AAE1B,SAAS,MAAM;IACb,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACzE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAC5C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAA;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE,SAAmB;IACzE,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,UAAU,CAAA;QACpB,OAAM;IACR,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,SAAS,CAAA;QACnB,OAAM;IACR,CAAC;IACD,OAAO,GAAG,MAAM,EAAE,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,CAAC,CAAC,GAAe,EAAE,MAA+B;IAChE,IAAI,IAAI,GAAW,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import '@deepseek-ai/dsh-session';
|
|
3
|
+
import '@deepseek-ai/dsh-tools';
|
|
4
|
+
import '@deepseek-ai/cordis-plugin-timer';
|
|
5
|
+
import type { DeepJitConfig } from './config.ts';
|
|
6
|
+
export { Config } from './config.ts';
|
|
7
|
+
export declare const name = "deepjit";
|
|
8
|
+
export declare const inject: string[];
|
|
9
|
+
export declare function apply(ctx: Context, config: DeepJitConfig): void;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { appendFileSync } from 'node:fs';
|
|
2
|
+
import { join as pathJoin } from 'node:path';
|
|
3
|
+
import { CallId } from '@deepseek-ai/dsh-llm';
|
|
4
|
+
import '@deepseek-ai/dsh-session';
|
|
5
|
+
import '@deepseek-ai/dsh-tools';
|
|
6
|
+
import '@deepseek-ai/cordis-plugin-timer';
|
|
7
|
+
export { Config } from "./config.js";
|
|
8
|
+
import { DeepJitStore, qualityScore } from "./store.js";
|
|
9
|
+
import { TraceCollector } from "./collector.js";
|
|
10
|
+
import { mineHotPatterns } from "./miner.js";
|
|
11
|
+
import { Summarizer } from "./summarizer.js";
|
|
12
|
+
import { ArtifactFeedback } from "./feedback.js";
|
|
13
|
+
import { FlowExecutor } from "./flow-executor.js";
|
|
14
|
+
import { StatusTool } from "./status-tool.js";
|
|
15
|
+
import { resolveDirs } from "./paths.js";
|
|
16
|
+
import { setLocale } from "./i18n.js";
|
|
17
|
+
import { runTiering } from "./compiler/tiering.js";
|
|
18
|
+
import { metrics } from "./metrics.js";
|
|
19
|
+
export const name = 'deepjit';
|
|
20
|
+
export const inject = ['llm', 'skills', 'tools', 'sessionPersistence', 'timer'];
|
|
21
|
+
const callIdFactory = (uuid) => CallId(uuid);
|
|
22
|
+
/**
|
|
23
|
+
* Best-effort read of the harness locale (web client `locale` settings
|
|
24
|
+
* namespace). Returns undefined when absent (e.g. headless), letting i18n
|
|
25
|
+
* fall back to the environment, then English.
|
|
26
|
+
*/
|
|
27
|
+
function readDshLocale(ctx) {
|
|
28
|
+
try {
|
|
29
|
+
const value = ctx
|
|
30
|
+
.settings?.scope?.('locale')?.get?.();
|
|
31
|
+
if (value && typeof value === 'object' && 'preference' in value) {
|
|
32
|
+
return value.preference;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// dsh locale is optional
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
export function apply(ctx, config) {
|
|
41
|
+
if (!config.enabled)
|
|
42
|
+
return;
|
|
43
|
+
setLocale(config.locale, readDshLocale(ctx));
|
|
44
|
+
const dirs = resolveDirs(ctx, config);
|
|
45
|
+
const store = new DeepJitStore(dirs.dbPath);
|
|
46
|
+
const collector = new TraceCollector(store, () => collector.flushSync(), config.maxResultChars, config.flushBatchSize, config.maxPendingCalls);
|
|
47
|
+
const log = (msg) => {
|
|
48
|
+
;
|
|
49
|
+
ctx.logger?.info(msg);
|
|
50
|
+
try {
|
|
51
|
+
appendFileSync(pathJoin(dirs.home, 'deepjit', 'deepjit.log'), `${new Date().toISOString()} ${msg}\n`);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// logging is best-effort
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const skillsService = ctx.skills;
|
|
58
|
+
const skillsAdapter = skillsService
|
|
59
|
+
? {
|
|
60
|
+
register: (s) => skillsService.register(s),
|
|
61
|
+
get: (name) => skillsService.get(name),
|
|
62
|
+
on: (event, handler) => {
|
|
63
|
+
const off = ctx.on(event, handler);
|
|
64
|
+
return () => {
|
|
65
|
+
if (typeof off === 'function')
|
|
66
|
+
off();
|
|
67
|
+
};
|
|
68
|
+
},
|
|
69
|
+
}
|
|
70
|
+
: { register: () => () => { }, get: async () => undefined, on: () => () => { } };
|
|
71
|
+
const feedback = new ArtifactFeedback({ skillDir: dirs.skillDir, flowDir: dirs.flowDir }, skillsAdapter, log);
|
|
72
|
+
const persistence = ctx.sessionPersistence;
|
|
73
|
+
const llm = ctx.llm;
|
|
74
|
+
const tools = ctx.tools;
|
|
75
|
+
const summarizer = new Summarizer(store, {
|
|
76
|
+
llmProvider: config.llmProvider,
|
|
77
|
+
llmModel: config.llmModel,
|
|
78
|
+
maxResultChars: config.maxResultChars,
|
|
79
|
+
minRepeat: config.minRepeat,
|
|
80
|
+
topK: config.topK,
|
|
81
|
+
minFlowSteps: config.minFlowSteps,
|
|
82
|
+
minPatternValue: config.minPatternValue,
|
|
83
|
+
transcriptMaxRows: config.transcriptMaxRows,
|
|
84
|
+
compileCandidates: config.compileCandidates,
|
|
85
|
+
}, { stream: (o) => llm.stream(o) }, persistence, async (artifact) => {
|
|
86
|
+
const published = await feedback.publish(artifact);
|
|
87
|
+
if (config.dryRun) {
|
|
88
|
+
feedback.disable(published.name);
|
|
89
|
+
store.updateArtifactStatus(published.name, 'disabled');
|
|
90
|
+
log(`deepjit: dry-run published "${published.name}" as disabled (enable via deepjit_status)`);
|
|
91
|
+
}
|
|
92
|
+
return published;
|
|
93
|
+
}, log, { toolExists: (name) => name === 'deepjit_flow' || tools.get(name) !== undefined });
|
|
94
|
+
const flowExecutor = new FlowExecutor(dirs.flowDir, store, (input) => tools.execute(input), callIdFactory, config.stepTimeoutMs, config.maxResultChars, log);
|
|
95
|
+
const statusTool = new StatusTool(store, feedback, dirs, log);
|
|
96
|
+
// capture
|
|
97
|
+
ctx.on('session/event', (session, event) => {
|
|
98
|
+
collector.handleEvent(session?.id, event);
|
|
99
|
+
});
|
|
100
|
+
ctx.on('tools/result', (exec, result) => {
|
|
101
|
+
collector.handleToolResult(exec, result);
|
|
102
|
+
});
|
|
103
|
+
ctx.on('session/flush', () => collector.flushSync());
|
|
104
|
+
ctx.interval(() => collector.flushSync(), config.flushIntervalMs);
|
|
105
|
+
// JIT cycle: mine hot paths, then compile the strongest ones
|
|
106
|
+
ctx.interval(() => {
|
|
107
|
+
mineHotPatterns(store, {
|
|
108
|
+
ngramMin: config.ngramMin,
|
|
109
|
+
ngramMax: config.ngramMax,
|
|
110
|
+
maxRows: config.minerMaxRows,
|
|
111
|
+
argumentAware: config.argumentAware,
|
|
112
|
+
});
|
|
113
|
+
if (config.gcEnabled) {
|
|
114
|
+
const removed = store.gcStale(Date.now(), config.gcStaleMs, config.gcProtectMs);
|
|
115
|
+
for (const name of removed)
|
|
116
|
+
log(`deepjit: gc disabled stale artifact ${name}`);
|
|
117
|
+
metrics.inc('gc_artifacts_disabled', removed.length);
|
|
118
|
+
const prunedTraces = store.pruneTraces(config.traceRetentionMs);
|
|
119
|
+
const prunedPatterns = store.prunePatterns(config.patternRetentionMs);
|
|
120
|
+
metrics.inc('traces_pruned', prunedTraces);
|
|
121
|
+
metrics.inc('patterns_pruned', prunedPatterns);
|
|
122
|
+
if (prunedTraces > 0)
|
|
123
|
+
log(`deepjit: pruned ${prunedTraces} old trace rows`);
|
|
124
|
+
if (prunedPatterns > 0)
|
|
125
|
+
log(`deepjit: pruned ${prunedPatterns} stale patterns`);
|
|
126
|
+
if (config.minQuality > 0) {
|
|
127
|
+
for (const row of store.listActiveWithUsage(config.qualityMinUses)) {
|
|
128
|
+
if (qualityScore(row.use_count, row.success_count) < config.minQuality) {
|
|
129
|
+
feedback.disable(row.name);
|
|
130
|
+
store.updateArtifactStatus(row.name, 'disabled');
|
|
131
|
+
metrics.inc('quality_pruned');
|
|
132
|
+
log(`deepjit: quality-pruned low-quality artifact ${row.name}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const tier = runTiering(store, {
|
|
138
|
+
deoptMinUses: config.deoptMinUses,
|
|
139
|
+
deoptMaxSuccessRate: config.deoptMaxSuccessRate,
|
|
140
|
+
promoteMinUses: config.promoteMinUses,
|
|
141
|
+
promoteMinSuccessRate: config.promoteMinSuccessRate,
|
|
142
|
+
});
|
|
143
|
+
metrics.inc('deopt', tier.deopted.length);
|
|
144
|
+
metrics.inc('promote_candidates', tier.promote.length);
|
|
145
|
+
for (const name of tier.deopted)
|
|
146
|
+
log(`deepjit: deoptimized unreliable flow ${name}`);
|
|
147
|
+
for (const skill of tier.promote) {
|
|
148
|
+
if (skill.source_pattern_id == null)
|
|
149
|
+
continue;
|
|
150
|
+
void summarizer
|
|
151
|
+
.compilePatternAsFlow(skill.source_pattern_id)
|
|
152
|
+
.catch((err) => log(`deepjit: promotion error: ${err.message}`));
|
|
153
|
+
}
|
|
154
|
+
if (!summarizer.shouldRun(config.minIntervalMs))
|
|
155
|
+
return;
|
|
156
|
+
void summarizer.run().catch((err) => log(`deepjit: jit run failed: ${err.message}`));
|
|
157
|
+
}, config.summarizeIntervalMs);
|
|
158
|
+
ctx.tools.register(flowExecutor.toolDefinition);
|
|
159
|
+
ctx.tools.register(statusTool.toolDefinition);
|
|
160
|
+
ctx.effect(() => async () => {
|
|
161
|
+
collector.flushSync();
|
|
162
|
+
const deadline = Date.now() + 10_000;
|
|
163
|
+
while (summarizer.busy && Date.now() < deadline) {
|
|
164
|
+
await new Promise((r) => setTimeout(r, 200));
|
|
165
|
+
}
|
|
166
|
+
feedback.disposeAll();
|
|
167
|
+
store.close();
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight in-process metrics for the DeepJIT pipeline.
|
|
3
|
+
*
|
|
4
|
+
* dsh's own observability (session-telemetry-otel) only exports agent-session
|
|
5
|
+
* events as OTel logs; it does not expose plugin-facing counters. This module
|
|
6
|
+
* gives DeepJIT its own counters + timing histograms, readable via
|
|
7
|
+
* `deepjit_status {action:"metrics"}`.
|
|
8
|
+
*
|
|
9
|
+
* Kept as a process-local singleton: metrics describe the running plugin
|
|
10
|
+
* instance and reset on restart (durable stats live in the SQLite tables).
|
|
11
|
+
*/
|
|
12
|
+
declare class Metrics {
|
|
13
|
+
private counters;
|
|
14
|
+
private timings;
|
|
15
|
+
private otelCounters;
|
|
16
|
+
private otelHistograms;
|
|
17
|
+
private meter;
|
|
18
|
+
inc(name: string, by?: number): void;
|
|
19
|
+
/** Record a duration sample (ms). */
|
|
20
|
+
observe(name: string, ms: number): void;
|
|
21
|
+
get(name: string): number;
|
|
22
|
+
/** Flatten counters + timing stats into a plain snapshot for reporting. */
|
|
23
|
+
snapshot(): Record<string, number>;
|
|
24
|
+
reset(): void;
|
|
25
|
+
}
|
|
26
|
+
/** Process-wide metrics singleton. */
|
|
27
|
+
export declare const metrics: Metrics;
|
|
28
|
+
export {};
|
package/dist/metrics.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight in-process metrics for the DeepJIT pipeline.
|
|
3
|
+
*
|
|
4
|
+
* dsh's own observability (session-telemetry-otel) only exports agent-session
|
|
5
|
+
* events as OTel logs; it does not expose plugin-facing counters. This module
|
|
6
|
+
* gives DeepJIT its own counters + timing histograms, readable via
|
|
7
|
+
* `deepjit_status {action:"metrics"}`.
|
|
8
|
+
*
|
|
9
|
+
* Kept as a process-local singleton: metrics describe the running plugin
|
|
10
|
+
* instance and reset on restart (durable stats live in the SQLite tables).
|
|
11
|
+
*/
|
|
12
|
+
import { metrics as otel } from '@opentelemetry/api';
|
|
13
|
+
class Metrics {
|
|
14
|
+
counters = new Map();
|
|
15
|
+
timings = new Map();
|
|
16
|
+
otelCounters = new Map();
|
|
17
|
+
otelHistograms = new Map();
|
|
18
|
+
meter() {
|
|
19
|
+
return otel.getMeter('deepjit');
|
|
20
|
+
}
|
|
21
|
+
inc(name, by = 1) {
|
|
22
|
+
this.counters.set(name, (this.counters.get(name) ?? 0) + by);
|
|
23
|
+
let c = this.otelCounters.get(name);
|
|
24
|
+
if (!c) {
|
|
25
|
+
c = this.meter().createCounter(name);
|
|
26
|
+
this.otelCounters.set(name, c);
|
|
27
|
+
}
|
|
28
|
+
c.add(by);
|
|
29
|
+
}
|
|
30
|
+
/** Record a duration sample (ms). */
|
|
31
|
+
observe(name, ms) {
|
|
32
|
+
const t = this.timings.get(name) ?? { count: 0, sum: 0, max: 0 };
|
|
33
|
+
t.count++;
|
|
34
|
+
t.sum += ms;
|
|
35
|
+
if (ms > t.max)
|
|
36
|
+
t.max = ms;
|
|
37
|
+
this.timings.set(name, t);
|
|
38
|
+
let h = this.otelHistograms.get(name);
|
|
39
|
+
if (!h) {
|
|
40
|
+
h = this.meter().createHistogram(name, { unit: 'ms' });
|
|
41
|
+
this.otelHistograms.set(name, h);
|
|
42
|
+
}
|
|
43
|
+
h.record(ms);
|
|
44
|
+
}
|
|
45
|
+
get(name) {
|
|
46
|
+
return this.counters.get(name) ?? 0;
|
|
47
|
+
}
|
|
48
|
+
/** Flatten counters + timing stats into a plain snapshot for reporting. */
|
|
49
|
+
snapshot() {
|
|
50
|
+
const out = {};
|
|
51
|
+
for (const [k, v] of this.counters)
|
|
52
|
+
out[k] = v;
|
|
53
|
+
for (const [k, t] of this.timings) {
|
|
54
|
+
out[`${k}.count`] = t.count;
|
|
55
|
+
out[`${k}.sum_ms`] = Math.round(t.sum);
|
|
56
|
+
out[`${k}.max_ms`] = Math.round(t.max);
|
|
57
|
+
out[`${k}.avg_ms`] = t.count ? Math.round(t.sum / t.count) : 0;
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
reset() {
|
|
62
|
+
this.counters.clear();
|
|
63
|
+
this.timings.clear();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** Process-wide metrics singleton. */
|
|
67
|
+
export const metrics = new Metrics();
|
|
68
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/miner.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DeepJitStore } from './store.ts';
|
|
2
|
+
export interface MinerConfig {
|
|
3
|
+
ngramMin: number;
|
|
4
|
+
ngramMax: number;
|
|
5
|
+
maxRows?: number;
|
|
6
|
+
argumentAware?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Extract intent keywords: ASCII words + CJK bigrams, stopword filtered. */
|
|
9
|
+
export declare function extractKeywords(text: string, maxPerText?: number): string[];
|
|
10
|
+
/**
|
|
11
|
+
* Incremental hot-path mining: per-session tool-sequence n-grams and intent
|
|
12
|
+
* keywords, aggregated across sessions into the patterns table.
|
|
13
|
+
*/
|
|
14
|
+
export declare function mineHotPatterns(store: DeepJitStore, cfg: MinerConfig): void;
|
package/dist/miner.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/** Build the mining token for one tool row; optionally argument-aware. */
|
|
2
|
+
function toolToken(p, argumentAware) {
|
|
3
|
+
const name = p.name ?? '';
|
|
4
|
+
if (!argumentAware)
|
|
5
|
+
return name;
|
|
6
|
+
try {
|
|
7
|
+
const args = JSON.parse(p.args ?? '{}');
|
|
8
|
+
const keys = Object.keys(args).sort().join('+');
|
|
9
|
+
return keys ? `${name}(${keys})` : name;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return name;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const STOPWORDS = new Set([
|
|
16
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'to', 'of', 'in', 'on',
|
|
17
|
+
'for', 'and', 'or', 'with', 'at', 'by', 'from', 'as', 'it', 'its', 'this', 'that',
|
|
18
|
+
'these', 'those', 'please', 'can', 'could', 'would', 'should', 'do', 'does', 'did',
|
|
19
|
+
'i', 'you', 'we', 'they', 'he', 'she', 'me', 'my', 'your', 'our', 'their',
|
|
20
|
+
'help', 'want', 'need', 'make', 'use', 'using', 'get', 'give', 'tell',
|
|
21
|
+
]);
|
|
22
|
+
/** Extract intent keywords: ASCII words + CJK bigrams, stopword filtered. */
|
|
23
|
+
export function extractKeywords(text, maxPerText = 12) {
|
|
24
|
+
const out = [];
|
|
25
|
+
const push = (tok) => {
|
|
26
|
+
const lower = tok.toLowerCase();
|
|
27
|
+
if (lower.length >= 2 && !STOPWORDS.has(lower))
|
|
28
|
+
out.push(lower);
|
|
29
|
+
};
|
|
30
|
+
const isAscii = (s) => {
|
|
31
|
+
for (const ch of s)
|
|
32
|
+
if ((ch.codePointAt(0) ?? 0) > 0x7f)
|
|
33
|
+
return false;
|
|
34
|
+
return true;
|
|
35
|
+
};
|
|
36
|
+
for (const word of text.split(/[^\p{L}\p{N}]+/u)) {
|
|
37
|
+
if (isAscii(word))
|
|
38
|
+
push(word);
|
|
39
|
+
}
|
|
40
|
+
for (const pair of text.match(/[\u4e00-\u9fff]{2}/g) ?? [])
|
|
41
|
+
push(pair);
|
|
42
|
+
return out.slice(0, maxPerText);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Incremental hot-path mining: per-session tool-sequence n-grams and intent
|
|
46
|
+
* keywords, aggregated across sessions into the patterns table.
|
|
47
|
+
*/
|
|
48
|
+
export function mineHotPatterns(store, cfg) {
|
|
49
|
+
const now = Date.now();
|
|
50
|
+
for (const session of store.listSummarizableSessions()) {
|
|
51
|
+
const fromSeq = session.last_summarized_seq;
|
|
52
|
+
const toolRows = store.readTracesSince(session.id, fromSeq, ['tool'], cfg.maxRows);
|
|
53
|
+
const userRows = store.readTracesSince(session.id, fromSeq, ['user'], cfg.maxRows);
|
|
54
|
+
const names = toolRows
|
|
55
|
+
.map((r) => {
|
|
56
|
+
try {
|
|
57
|
+
return toolToken(JSON.parse(r.payload), cfg.argumentAware ?? false);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return '';
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
.filter((name) => name && !name.startsWith('deepjit_'));
|
|
64
|
+
// n-gram counting for this session
|
|
65
|
+
const local = new Map();
|
|
66
|
+
for (let n = cfg.ngramMin; n <= cfg.ngramMax; n++) {
|
|
67
|
+
for (let i = 0; i + n <= names.length; i++) {
|
|
68
|
+
const key = names.slice(i, i + n).join('>');
|
|
69
|
+
local.set(key, (local.get(key) ?? 0) + 1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
for (const [key, count] of local) {
|
|
73
|
+
store.upsertPattern('flow-seq', key, count, 1, session.id, now);
|
|
74
|
+
}
|
|
75
|
+
// intent keywords
|
|
76
|
+
const kw = new Map();
|
|
77
|
+
for (const row of userRows) {
|
|
78
|
+
try {
|
|
79
|
+
const text = JSON.parse(row.payload).text ?? '';
|
|
80
|
+
for (const token of extractKeywords(text))
|
|
81
|
+
kw.set(token, (kw.get(token) ?? 0) + 1);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// skip malformed payloads
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const [key, count] of kw) {
|
|
88
|
+
store.upsertPattern('intent', key, count, 1, session.id, now);
|
|
89
|
+
}
|
|
90
|
+
store.advanceSummarizeWatermark(session.id, session.last_seq);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=miner.js.map
|