ccnow 0.0.1
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 +147 -0
- package/dist/cli-parser.d.ts +9 -0
- package/dist/cli-parser.js +50 -0
- package/dist/cli-parser.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +64 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +2 -0
- package/dist/config.js +34 -0
- package/dist/config.js.map +1 -0
- package/dist/dsl/context.d.ts +6 -0
- package/dist/dsl/context.js +23 -0
- package/dist/dsl/context.js.map +1 -0
- package/dist/dsl/cost.d.ts +3 -0
- package/dist/dsl/cost.js +6 -0
- package/dist/dsl/cost.js.map +1 -0
- package/dist/dsl/git.d.ts +6 -0
- package/dist/dsl/git.js +23 -0
- package/dist/dsl/git.js.map +1 -0
- package/dist/dsl/index.d.ts +7 -0
- package/dist/dsl/index.js +8 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl/model.d.ts +3 -0
- package/dist/dsl/model.js +6 -0
- package/dist/dsl/model.js.map +1 -0
- package/dist/dsl/primitives.d.ts +14 -0
- package/dist/dsl/primitives.js +28 -0
- package/dist/dsl/primitives.js.map +1 -0
- package/dist/dsl/pwd.d.ts +7 -0
- package/dist/dsl/pwd.js +11 -0
- package/dist/dsl/pwd.js.map +1 -0
- package/dist/dsl/session.d.ts +5 -0
- package/dist/dsl/session.js +29 -0
- package/dist/dsl/session.js.map +1 -0
- package/dist/presets/default.d.ts +2 -0
- package/dist/presets/default.js +21 -0
- package/dist/presets/default.js.map +1 -0
- package/dist/presets/full.d.ts +2 -0
- package/dist/presets/full.js +32 -0
- package/dist/presets/full.js.map +1 -0
- package/dist/presets/index.d.ts +3 -0
- package/dist/presets/index.js +15 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/minimal.d.ts +2 -0
- package/dist/presets/minimal.js +13 -0
- package/dist/presets/minimal.js.map +1 -0
- package/dist/providers/context.d.ts +7 -0
- package/dist/providers/context.js +33 -0
- package/dist/providers/context.js.map +1 -0
- package/dist/providers/cost.d.ts +5 -0
- package/dist/providers/cost.js +16 -0
- package/dist/providers/cost.js.map +1 -0
- package/dist/providers/git.d.ts +8 -0
- package/dist/providers/git.js +40 -0
- package/dist/providers/git.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +15 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/model.d.ts +5 -0
- package/dist/providers/model.js +9 -0
- package/dist/providers/model.js.map +1 -0
- package/dist/providers/pwd.d.ts +7 -0
- package/dist/providers/pwd.js +45 -0
- package/dist/providers/pwd.js.map +1 -0
- package/dist/providers/session.d.ts +7 -0
- package/dist/providers/session.js +24 -0
- package/dist/providers/session.js.map +1 -0
- package/dist/providers.d.ts +7 -0
- package/dist/providers.js +39 -0
- package/dist/providers.js.map +1 -0
- package/dist/registry.d.ts +6 -0
- package/dist/registry.js +10 -0
- package/dist/registry.js.map +1 -0
- package/dist/render.d.ts +3 -0
- package/dist/render.js +53 -0
- package/dist/render.js.map +1 -0
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +51 -0
- package/dist/runner.js.map +1 -0
- package/dist/segments/context.percent.d.ts +2 -0
- package/dist/segments/context.percent.js +11 -0
- package/dist/segments/context.percent.js.map +1 -0
- package/dist/segments/context.size.d.ts +2 -0
- package/dist/segments/context.size.js +9 -0
- package/dist/segments/context.size.js.map +1 -0
- package/dist/segments/context.tokens.d.ts +2 -0
- package/dist/segments/context.tokens.js +9 -0
- package/dist/segments/context.tokens.js.map +1 -0
- package/dist/segments/cost.usd.d.ts +2 -0
- package/dist/segments/cost.usd.js +9 -0
- package/dist/segments/cost.usd.js.map +1 -0
- package/dist/segments/git.branch.d.ts +2 -0
- package/dist/segments/git.branch.js +9 -0
- package/dist/segments/git.branch.js.map +1 -0
- package/dist/segments/git.deletions.d.ts +2 -0
- package/dist/segments/git.deletions.js +11 -0
- package/dist/segments/git.deletions.js.map +1 -0
- package/dist/segments/git.insertions.d.ts +2 -0
- package/dist/segments/git.insertions.js +11 -0
- package/dist/segments/git.insertions.js.map +1 -0
- package/dist/segments/index.d.ts +2 -0
- package/dist/segments/index.js +33 -0
- package/dist/segments/index.js.map +1 -0
- package/dist/segments/literal.d.ts +2 -0
- package/dist/segments/literal.js +10 -0
- package/dist/segments/literal.js.map +1 -0
- package/dist/segments/model.name.d.ts +2 -0
- package/dist/segments/model.name.js +9 -0
- package/dist/segments/model.name.js.map +1 -0
- package/dist/segments/pwd.name.d.ts +2 -0
- package/dist/segments/pwd.name.js +9 -0
- package/dist/segments/pwd.name.js.map +1 -0
- package/dist/segments/pwd.path.d.ts +2 -0
- package/dist/segments/pwd.path.js +9 -0
- package/dist/segments/pwd.path.js.map +1 -0
- package/dist/segments/pwd.smart.d.ts +2 -0
- package/dist/segments/pwd.smart.js +9 -0
- package/dist/segments/pwd.smart.js.map +1 -0
- package/dist/segments/session.duration.d.ts +2 -0
- package/dist/segments/session.duration.js +9 -0
- package/dist/segments/session.duration.js.map +1 -0
- package/dist/segments/session.lines-added.d.ts +2 -0
- package/dist/segments/session.lines-added.js +11 -0
- package/dist/segments/session.lines-added.js.map +1 -0
- package/dist/segments/session.lines-removed.d.ts +2 -0
- package/dist/segments/session.lines-removed.js +11 -0
- package/dist/segments/session.lines-removed.js.map +1 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.js +18 -0
- package/dist/session.js.map +1 -0
- package/dist/style.d.ts +3 -0
- package/dist/style.js +72 -0
- package/dist/style.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full.js","sourceRoot":"","sources":["../../src/presets/full.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,OAAO,EACP,SAAS,EACT,OAAO,EACP,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,CAAC,MAAM,UAAU,GAAkB,UAAU,CAAC,GAAG,EAAE,CAAC;IACxD,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC9D,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACzE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;YAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC/C,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC7C,CAAC;KACH,CAAC;IACF,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IACpE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC3B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAC3C,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC;QACnB,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACtB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;KACvB,CAAC;IACF,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAC3C,OAAO,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAC3C,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,iBAAiB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACnD,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACpD,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defaultPreset } from './default.js';
|
|
2
|
+
import { minimalPreset } from './minimal.js';
|
|
3
|
+
import { fullPreset } from './full.js';
|
|
4
|
+
const presets = new Map([
|
|
5
|
+
['default', defaultPreset],
|
|
6
|
+
['minimal', minimalPreset],
|
|
7
|
+
['full', fullPreset],
|
|
8
|
+
]);
|
|
9
|
+
export function getPreset(name) {
|
|
10
|
+
return presets.get(name);
|
|
11
|
+
}
|
|
12
|
+
export function listPresets() {
|
|
13
|
+
return [...presets.keys()];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAwB;IAC7C,CAAC,SAAS,EAAE,aAAa,CAAC;IAC1B,CAAC,SAAS,EAAE,aAAa,CAAC;IAC1B,CAAC,MAAM,EAAE,UAAU,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StatusLine, GitGroup, GitBranch, ContextGroup, ContextTokens, Literal, ContextSize, } from '../dsl/index.js';
|
|
2
|
+
export const minimalPreset = StatusLine(() => [
|
|
3
|
+
{ type: 'pwd.name', provider: 'pwd', style: { color: '39' } },
|
|
4
|
+
GitGroup({ prefix: ' | ', color: '240' })(() => [
|
|
5
|
+
GitBranch({ color: 'whiteBright', bold: true }),
|
|
6
|
+
]),
|
|
7
|
+
ContextGroup({ prefix: ' | ', color: '240' })(() => [
|
|
8
|
+
ContextTokens({ color: 'white' }),
|
|
9
|
+
Literal({ text: '/' }),
|
|
10
|
+
ContextSize({ color: 'white' }),
|
|
11
|
+
]),
|
|
12
|
+
]);
|
|
13
|
+
//# sourceMappingURL=minimal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimal.js","sourceRoot":"","sources":["../../src/presets/minimal.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,MAAM,CAAC,MAAM,aAAa,GAAkB,UAAU,CAAC,GAAG,EAAE,CAAC;IAC3D,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC7D,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KAChD,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAClD,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACjC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACtB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KAChC,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
function formatTokens(total) {
|
|
2
|
+
if (total >= 1_000_000) {
|
|
3
|
+
const val = total / 1_000_000;
|
|
4
|
+
return val % 1 === 0 ? `${val}M` : `${val.toFixed(1)}M`;
|
|
5
|
+
}
|
|
6
|
+
if (total >= 1_000) {
|
|
7
|
+
return `${Math.round(total / 1_000)}K`;
|
|
8
|
+
}
|
|
9
|
+
return `${total}`;
|
|
10
|
+
}
|
|
11
|
+
export const contextProvider = {
|
|
12
|
+
name: 'context',
|
|
13
|
+
async resolve(session) {
|
|
14
|
+
const cw = session.context_window;
|
|
15
|
+
if (!cw) {
|
|
16
|
+
return { tokens: null, size: null, percent: null };
|
|
17
|
+
}
|
|
18
|
+
const usage = cw.current_usage;
|
|
19
|
+
let totalTokens = 0;
|
|
20
|
+
if (usage) {
|
|
21
|
+
totalTokens =
|
|
22
|
+
(usage.input_tokens ?? 0) +
|
|
23
|
+
(usage.cache_creation_input_tokens ?? 0) +
|
|
24
|
+
(usage.cache_read_input_tokens ?? 0);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
tokens: usage ? formatTokens(totalTokens) : null,
|
|
28
|
+
size: cw.context_window_size ? formatTokens(cw.context_window_size) : null,
|
|
29
|
+
percent: cw.used_percentage ?? null,
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/providers/context.ts"],"names":[],"mappings":"AAQA,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,KAAK,GAAG,SAAS,CAAC;QAC9B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACnB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,SAAS;IACf,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;QAClC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC;QAC/B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,KAAK,EAAE,CAAC;YACV,WAAW;gBACT,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;oBACzB,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;oBACxC,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;YAChD,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1E,OAAO,EAAE,EAAE,CAAC,eAAe,IAAI,IAAI;SACpC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function formatUsd(amount) {
|
|
2
|
+
return `$${amount.toFixed(2)}`;
|
|
3
|
+
}
|
|
4
|
+
export const costProvider = {
|
|
5
|
+
name: 'cost',
|
|
6
|
+
async resolve(session) {
|
|
7
|
+
const cost = session.cost;
|
|
8
|
+
if (!cost) {
|
|
9
|
+
return { usd: null };
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
usd: formatUsd(cost.total_cost_usd),
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=cost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/providers/cost.ts"],"names":[],"mappings":"AAMA,SAAS,SAAS,CAAC,MAAc;IAC/B,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,MAAM;IACZ,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,OAAO;YACL,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;SACpC,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DataProvider } from '../types.js';
|
|
2
|
+
export interface GitData {
|
|
3
|
+
branch: string | null;
|
|
4
|
+
insertions: number | null;
|
|
5
|
+
deletions: number | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function gitAvailable(cwd: string): Promise<boolean>;
|
|
8
|
+
export declare const gitProvider: DataProvider;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
async function exec(cmd, args, cwd) {
|
|
5
|
+
try {
|
|
6
|
+
const { stdout } = await execFileAsync(cmd, args, { cwd, timeout: 5000 });
|
|
7
|
+
return stdout.trim();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return '';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function gitAvailable(cwd) {
|
|
14
|
+
const result = await exec('git', ['-C', cwd, 'rev-parse', '--git-dir'], cwd);
|
|
15
|
+
return result !== '';
|
|
16
|
+
}
|
|
17
|
+
export const gitProvider = {
|
|
18
|
+
name: 'git',
|
|
19
|
+
async resolve(session) {
|
|
20
|
+
const cwd = session.cwd;
|
|
21
|
+
const isGit = await gitAvailable(cwd);
|
|
22
|
+
if (!isGit) {
|
|
23
|
+
return { branch: null, insertions: null, deletions: null };
|
|
24
|
+
}
|
|
25
|
+
const branch = (await exec('git', ['branch', '--show-current'], cwd)) || null;
|
|
26
|
+
const diffstat = await exec('git', ['diff', '--shortstat', 'HEAD'], cwd);
|
|
27
|
+
let insertions = null;
|
|
28
|
+
let deletions = null;
|
|
29
|
+
if (diffstat) {
|
|
30
|
+
const insMatch = diffstat.match(/(\d+) insertion/);
|
|
31
|
+
const delMatch = diffstat.match(/(\d+) deletion/);
|
|
32
|
+
if (insMatch)
|
|
33
|
+
insertions = parseInt(insMatch[1], 10);
|
|
34
|
+
if (delMatch)
|
|
35
|
+
deletions = parseInt(delMatch[1], 10);
|
|
36
|
+
}
|
|
37
|
+
return { branch, insertions, deletions };
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/providers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAQ1C,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,IAAc,EAAE,GAAW;IAC1D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7E,OAAO,MAAM,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,KAAK;IACX,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7D,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;QAE9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACzE,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,SAAS,GAAkB,IAAI,CAAC;QAEpC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAClD,IAAI,QAAQ;gBAAE,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,QAAQ;gBAAE,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC3C,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { pwdProvider } from './pwd.js';
|
|
2
|
+
import { gitProvider } from './git.js';
|
|
3
|
+
import { contextProvider } from './context.js';
|
|
4
|
+
import { modelProvider } from './model.js';
|
|
5
|
+
import { costProvider } from './cost.js';
|
|
6
|
+
import { sessionProvider } from './session.js';
|
|
7
|
+
export function registerBuiltinProviders(registry) {
|
|
8
|
+
registry.register(pwdProvider);
|
|
9
|
+
registry.register(gitProvider);
|
|
10
|
+
registry.register(contextProvider);
|
|
11
|
+
registry.register(modelProvider);
|
|
12
|
+
registry.register(costProvider);
|
|
13
|
+
registry.register(sessionProvider);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,wBAAwB,CAAC,QAA0B;IACjE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/providers/model.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,OAAO;IACb,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,IAAI,IAAI;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
const MAX_ABBREVIATED = 2;
|
|
4
|
+
function smartPrefix(cwd) {
|
|
5
|
+
if (cwd === '/')
|
|
6
|
+
return '';
|
|
7
|
+
const home = os.homedir();
|
|
8
|
+
let p = cwd;
|
|
9
|
+
// Replace home dir with ~
|
|
10
|
+
if (p.startsWith(home)) {
|
|
11
|
+
p = '~' + p.slice(home.length);
|
|
12
|
+
}
|
|
13
|
+
const parts = p.split('/');
|
|
14
|
+
// 2 segments (e.g. /tmp or ~/foo) — just the root prefix with trailing /
|
|
15
|
+
if (parts.length <= 2) {
|
|
16
|
+
const root = parts[0] || '/';
|
|
17
|
+
return root.endsWith('/') ? root : root + '/';
|
|
18
|
+
}
|
|
19
|
+
const first = parts[0]; // '' for absolute, '~' for home-relative
|
|
20
|
+
const middle = parts.slice(1, -1);
|
|
21
|
+
// 3 segments (e.g. ~/Projects/ccnow) — keep prefix as-is with trailing /
|
|
22
|
+
if (parts.length <= 3)
|
|
23
|
+
return first + '/' + middle.join('/') + '/';
|
|
24
|
+
// Abbreviate up to MAX_ABBREVIATED middle segments, then ellipsis if more remain
|
|
25
|
+
if (middle.length <= MAX_ABBREVIATED) {
|
|
26
|
+
const abbreviated = middle.map((part) => part[0] ?? '');
|
|
27
|
+
return [first, ...abbreviated, ''].join('/');
|
|
28
|
+
}
|
|
29
|
+
const abbreviated = middle.slice(0, MAX_ABBREVIATED).map((part) => part[0] ?? '');
|
|
30
|
+
return [first, ...abbreviated, '\u2026', ''].join('/');
|
|
31
|
+
}
|
|
32
|
+
export const pwdProvider = {
|
|
33
|
+
name: 'pwd',
|
|
34
|
+
async resolve(session) {
|
|
35
|
+
const cwd = session.cwd;
|
|
36
|
+
const name = cwd === '/' ? '/' : path.basename(cwd);
|
|
37
|
+
const fullPrefix = cwd === '/' ? '' : path.dirname(cwd) + '/';
|
|
38
|
+
return {
|
|
39
|
+
name,
|
|
40
|
+
path: fullPrefix,
|
|
41
|
+
smart: smartPrefix(cwd),
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=pwd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pwd.js","sourceRoot":"","sources":["../../src/providers/pwd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AASzB,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,GAAG,CAAC;IAEZ,0BAA0B;IAC1B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,yEAAyE;IACzE,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,yCAAyC;IACjE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAElC,yEAAyE;IACzE,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAEnE,iFAAiF;IACjF,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,OAAO,CAAC,KAAK,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,KAAK;IACX,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAE9D,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC;SACxB,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
function formatDuration(ms) {
|
|
2
|
+
const totalSec = Math.floor(ms / 1000);
|
|
3
|
+
const hours = Math.floor(totalSec / 3600);
|
|
4
|
+
const mins = Math.floor((totalSec % 3600) / 60);
|
|
5
|
+
if (hours > 0) {
|
|
6
|
+
return `${hours}h ${mins}m`;
|
|
7
|
+
}
|
|
8
|
+
return `${mins}m`;
|
|
9
|
+
}
|
|
10
|
+
export const sessionProvider = {
|
|
11
|
+
name: 'session',
|
|
12
|
+
async resolve(session) {
|
|
13
|
+
const cost = session.cost;
|
|
14
|
+
if (!cost) {
|
|
15
|
+
return { duration: null, linesAdded: null, linesRemoved: null };
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
duration: formatDuration(cost.total_duration_ms),
|
|
19
|
+
linesAdded: cost.total_lines_added ?? null,
|
|
20
|
+
linesRemoved: cost.total_lines_removed ?? null,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/providers/session.ts"],"names":[],"mappings":"AAQA,SAAS,cAAc,CAAC,EAAU;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,IAAI,GAAG,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,IAAI,EAAE,SAAS;IACf,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAClE,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAChD,UAAU,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI;YAC1C,YAAY,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI;SAC/C,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DataProvider, SessionData, SegmentNode } from './types.js';
|
|
2
|
+
export declare class ProviderRegistry {
|
|
3
|
+
private providers;
|
|
4
|
+
register(provider: DataProvider): void;
|
|
5
|
+
collectProviderNames(tree: SegmentNode[]): Set<string>;
|
|
6
|
+
resolveAll(names: string[], session: SessionData): Promise<Map<string, unknown>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class ProviderRegistry {
|
|
2
|
+
providers = new Map();
|
|
3
|
+
register(provider) {
|
|
4
|
+
this.providers.set(provider.name, provider);
|
|
5
|
+
}
|
|
6
|
+
collectProviderNames(tree) {
|
|
7
|
+
const names = new Set();
|
|
8
|
+
const walk = (nodes) => {
|
|
9
|
+
for (const node of nodes) {
|
|
10
|
+
// Skip statically disabled nodes (and their children)
|
|
11
|
+
if (node.enabled === false)
|
|
12
|
+
continue;
|
|
13
|
+
if (node.provider)
|
|
14
|
+
names.add(node.provider);
|
|
15
|
+
if (node.children)
|
|
16
|
+
walk(node.children);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
walk(tree);
|
|
20
|
+
return names;
|
|
21
|
+
}
|
|
22
|
+
async resolveAll(names, session) {
|
|
23
|
+
const results = new Map();
|
|
24
|
+
const entries = names
|
|
25
|
+
.map((name) => ({ name, provider: this.providers.get(name) }))
|
|
26
|
+
.filter((e) => e.provider !== undefined);
|
|
27
|
+
const settled = await Promise.allSettled(entries.map(async ({ name, provider }) => {
|
|
28
|
+
const data = await provider.resolve(session);
|
|
29
|
+
return { name, data };
|
|
30
|
+
}));
|
|
31
|
+
for (const result of settled) {
|
|
32
|
+
if (result.status === 'fulfilled') {
|
|
33
|
+
results.set(result.value.name, result.value.data);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEpD,QAAQ,CAAC,QAAsB;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,oBAAoB,CAAC,IAAmB;QACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,KAAoB,EAAE,EAAE;YACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,sDAAsD;gBACtD,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;oBAAE,SAAS;gBACrC,IAAI,IAAI,CAAC,QAAQ;oBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe,EAAE,OAAoB;QACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;QAE3C,MAAM,OAAO,GAAG,KAAK;aAClB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,EAAiD,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAE1F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACvC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,CAAC,CAAC,CACH,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE9C,QAAQ,CAAC,OAAgB;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
|
package/dist/render.d.ts
ADDED
package/dist/render.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { applyStyle } from './style.js';
|
|
2
|
+
function isEnabled(node, session) {
|
|
3
|
+
if (node.enabled === undefined)
|
|
4
|
+
return true;
|
|
5
|
+
if (typeof node.enabled === 'boolean')
|
|
6
|
+
return node.enabled;
|
|
7
|
+
try {
|
|
8
|
+
return node.enabled(session);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function renderNode(node, registry, session, providerData) {
|
|
15
|
+
if (!isEnabled(node, session))
|
|
16
|
+
return null;
|
|
17
|
+
// Composite node: render children
|
|
18
|
+
if (node.children) {
|
|
19
|
+
const parts = [];
|
|
20
|
+
for (const child of node.children) {
|
|
21
|
+
const rendered = renderNode(child, registry, session, providerData);
|
|
22
|
+
if (rendered !== null)
|
|
23
|
+
parts.push(rendered);
|
|
24
|
+
}
|
|
25
|
+
if (parts.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
const joined = parts.join('');
|
|
28
|
+
return applyStyle(joined, node.style);
|
|
29
|
+
}
|
|
30
|
+
// Atomic node: look up segment and render
|
|
31
|
+
const segment = registry.get(node.type);
|
|
32
|
+
if (!segment)
|
|
33
|
+
return null;
|
|
34
|
+
const context = {
|
|
35
|
+
session,
|
|
36
|
+
provider: node.provider ? providerData.get(node.provider) : undefined,
|
|
37
|
+
props: node.props,
|
|
38
|
+
};
|
|
39
|
+
const value = segment.render(context);
|
|
40
|
+
if (value === null)
|
|
41
|
+
return null;
|
|
42
|
+
return applyStyle(value, node.style);
|
|
43
|
+
}
|
|
44
|
+
export function renderTree(tree, registry, session, providerData) {
|
|
45
|
+
const parts = [];
|
|
46
|
+
for (const node of tree) {
|
|
47
|
+
const rendered = renderNode(node, registry, session, providerData);
|
|
48
|
+
if (rendered !== null)
|
|
49
|
+
parts.push(rendered);
|
|
50
|
+
}
|
|
51
|
+
return parts.join('');
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,SAAS,SAAS,CAAC,IAAiB,EAAE,OAAoB;IACxD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC;IAC3D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CACjB,IAAiB,EACjB,QAAyB,EACzB,OAAoB,EACpB,YAAkC;IAElC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,kCAAkC;IAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACpE,IAAI,QAAQ,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,0CAA0C;IAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,OAAO,GAAG;QACd,OAAO;QACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAmB,EACnB,QAAyB,EACzB,OAAoB,EACpB,YAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QACnE,IAAI,QAAQ,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/runner.d.ts
ADDED
package/dist/runner.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { parseSession } from './session.js';
|
|
3
|
+
import { parseConfig } from './config.js';
|
|
4
|
+
import { SegmentRegistry } from './registry.js';
|
|
5
|
+
import { ProviderRegistry } from './providers.js';
|
|
6
|
+
import { registerBuiltinSegments } from './segments/index.js';
|
|
7
|
+
import { registerBuiltinProviders } from './providers/index.js';
|
|
8
|
+
import { renderTree } from './render.js';
|
|
9
|
+
import { getPreset } from './presets/index.js';
|
|
10
|
+
import { setColorLevel } from './style.js';
|
|
11
|
+
export async function run(args, stdin) {
|
|
12
|
+
// Parse session
|
|
13
|
+
const session = parseSession(stdin);
|
|
14
|
+
if (!session)
|
|
15
|
+
return '';
|
|
16
|
+
// Set color level based on format
|
|
17
|
+
setColorLevel(args.format === 'plain' ? 0 : 1);
|
|
18
|
+
try {
|
|
19
|
+
// Build registries
|
|
20
|
+
const segmentRegistry = new SegmentRegistry();
|
|
21
|
+
registerBuiltinSegments(segmentRegistry);
|
|
22
|
+
const providerRegistry = new ProviderRegistry();
|
|
23
|
+
registerBuiltinProviders(providerRegistry);
|
|
24
|
+
// Resolve render tree: config file > preset
|
|
25
|
+
let tree;
|
|
26
|
+
if (args.config) {
|
|
27
|
+
try {
|
|
28
|
+
const configJson = JSON.parse(readFileSync(args.config, 'utf-8'));
|
|
29
|
+
const configTree = parseConfig(configJson);
|
|
30
|
+
tree =
|
|
31
|
+
configTree.length > 0 ? configTree : (getPreset(args.preset) ?? getPreset('default'));
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
process.stderr.write(`ccnow: failed to load config: ${err}\n`);
|
|
35
|
+
tree = getPreset(args.preset) ?? getPreset('default');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
tree = getPreset(args.preset) ?? getPreset('default');
|
|
40
|
+
}
|
|
41
|
+
// Resolve providers
|
|
42
|
+
const providerNames = providerRegistry.collectProviderNames(tree);
|
|
43
|
+
const providerData = await providerRegistry.resolveAll([...providerNames], session);
|
|
44
|
+
// Render
|
|
45
|
+
return renderTree(tree, segmentRegistry, session, providerData);
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
setColorLevel(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAa,EAAE,KAAa;IACpD,gBAAgB;IAChB,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,kCAAkC;IAClC,aAAa,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,uBAAuB,CAAC,eAAe,CAAC,CAAC;QAEzC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChD,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;QAE3C,4CAA4C;QAC5C,IAAI,IAAmB,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI;oBACF,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,CAAE,CAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAAC;gBAC/D,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,CAAE,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,CAAE,CAAC;QACzD,CAAC;QAED,oBAAoB;QACpB,MAAM,aAAa,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpF,SAAS;QACT,OAAO,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const contextPercentSegment = {
|
|
2
|
+
name: 'context.percent',
|
|
3
|
+
provider: 'context',
|
|
4
|
+
render(context) {
|
|
5
|
+
const data = context.provider;
|
|
6
|
+
if (data?.percent == null)
|
|
7
|
+
return null;
|
|
8
|
+
return `${data.percent}%`;
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=context.percent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.percent.js","sourceRoot":"","sources":["../../src/segments/context.percent.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,qBAAqB,GAAY;IAC5C,IAAI,EAAE,iBAAiB;IACvB,QAAQ,EAAE,SAAS;IACnB,MAAM,CAAC,OAAuB;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAmC,CAAC;QACzD,IAAI,IAAI,EAAE,OAAO,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACvC,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;IAC5B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.size.js","sourceRoot":"","sources":["../../src/segments/context.size.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAY;IACzC,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,SAAS;IACnB,MAAM,CAAC,OAAuB;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAmC,CAAC;QACzD,OAAO,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;IAC5B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.tokens.js","sourceRoot":"","sources":["../../src/segments/context.tokens.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAY;IAC3C,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,SAAS;IACnB,MAAM,CAAC,OAAuB;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAmC,CAAC;QACzD,OAAO,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;IAC9B,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.usd.js","sourceRoot":"","sources":["../../src/segments/cost.usd.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,MAAM;IAChB,MAAM,CAAC,OAAuB;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAgC,CAAC;QACtD,OAAO,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC;IAC3B,CAAC;CACF,CAAC"}
|