@azrico/azcli 1.2.3 → 1.2.5
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 +5 -0
- package/dist/cli/create-cli.js +37 -0
- package/dist/cli/create-cli.js.map +1 -0
- package/dist/cli/index.js +23 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/options.js +17 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/core/files.js +82 -0
- package/dist/core/files.js.map +1 -0
- package/dist/core/json.js +16 -0
- package/dist/core/json.js.map +1 -0
- package/dist/core/logger.js +26 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/process.js +125 -0
- package/dist/core/process.js.map +1 -0
- package/dist/core/project-type.js +41 -0
- package/dist/core/project-type.js.map +1 -0
- package/dist/core/strings.js +20 -0
- package/dist/core/strings.js.map +1 -0
- package/dist/features/build/build.js +46 -0
- package/dist/features/build/build.js.map +1 -0
- package/dist/features/build/command.js +17 -0
- package/dist/features/build/command.js.map +1 -0
- package/dist/features/build/wordpress.js +135 -0
- package/dist/features/build/wordpress.js.map +1 -0
- package/dist/features/clean/clean.js +27 -0
- package/dist/features/clean/clean.js.map +1 -0
- package/dist/features/clean/command.js +13 -0
- package/dist/features/clean/command.js.map +1 -0
- package/dist/features/optimize-transcripts/agent-runner.js +40 -0
- package/dist/features/optimize-transcripts/agent-runner.js.map +1 -0
- package/dist/features/optimize-transcripts/command.js +24 -0
- package/dist/features/optimize-transcripts/command.js.map +1 -0
- package/dist/features/optimize-transcripts/optimize.js +72 -0
- package/dist/features/optimize-transcripts/optimize.js.map +1 -0
- package/dist/features/optimize-transcripts/prompts.js +39 -0
- package/dist/features/optimize-transcripts/prompts.js.map +1 -0
- package/dist/features/optimize-transcripts/redact.js +57 -0
- package/dist/features/optimize-transcripts/redact.js.map +1 -0
- package/dist/features/optimize-transcripts/secret-remover.js +85 -0
- package/dist/features/optimize-transcripts/secret-remover.js.map +1 -0
- package/dist/features/package/command.js +13 -0
- package/dist/features/package/command.js.map +1 -0
- package/dist/features/package/packager.js +132 -0
- package/dist/features/package/packager.js.map +1 -0
- package/dist/features/publish/command.js +13 -0
- package/dist/features/publish/command.js.map +1 -0
- package/dist/features/publish/publish.js +29 -0
- package/dist/features/publish/publish.js.map +1 -0
- package/dist/features/transcripts/command.js +27 -0
- package/dist/features/transcripts/command.js.map +1 -0
- package/dist/features/transcripts/extract.js +148 -0
- package/dist/features/transcripts/extract.js.map +1 -0
- package/dist/features/transcripts/jsonl.js +100 -0
- package/dist/features/transcripts/jsonl.js.map +1 -0
- package/dist/features/transcripts/options.js +53 -0
- package/dist/features/transcripts/options.js.map +1 -0
- package/dist/features/transcripts/render-markdown.js +105 -0
- package/dist/features/transcripts/render-markdown.js.map +1 -0
- package/dist/features/transcripts/sources/claude.js +150 -0
- package/dist/features/transcripts/sources/claude.js.map +1 -0
- package/dist/features/transcripts/sources/codex.js +171 -0
- package/dist/features/transcripts/sources/codex.js.map +1 -0
- package/dist/features/transcripts/types.js +5 -0
- package/dist/features/transcripts/types.js.map +1 -0
- package/dist/features/update/command.js +16 -0
- package/dist/features/update/command.js.map +1 -0
- package/dist/features/update/composer.js +35 -0
- package/dist/features/update/composer.js.map +1 -0
- package/dist/features/update/filter-options.js +23 -0
- package/dist/features/update/filter-options.js.map +1 -0
- package/dist/features/update/update.js +28 -0
- package/dist/features/update/update.js.map +1 -0
- package/dist/features/update/yarn.js +30 -0
- package/dist/features/update/yarn.js.map +1 -0
- package/dist/features/verify-changes/changed-files.js +36 -0
- package/dist/features/verify-changes/changed-files.js.map +1 -0
- package/dist/features/verify-changes/command.js +27 -0
- package/dist/features/verify-changes/command.js.map +1 -0
- package/dist/features/verify-changes/config.js +91 -0
- package/dist/features/verify-changes/config.js.map +1 -0
- package/dist/features/verify-changes/report.js +30 -0
- package/dist/features/verify-changes/report.js.map +1 -0
- package/dist/features/verify-changes/select.js +39 -0
- package/dist/features/verify-changes/select.js.map +1 -0
- package/dist/features/verify-changes/verify.js +54 -0
- package/dist/features/verify-changes/verify.js.map +1 -0
- package/dist/features/worktree/command.js +55 -0
- package/dist/features/worktree/command.js.map +1 -0
- package/dist/features/worktree/config.js +115 -0
- package/dist/features/worktree/config.js.map +1 -0
- package/dist/features/worktree/git.js +62 -0
- package/dist/features/worktree/git.js.map +1 -0
- package/dist/features/worktree/start.js +156 -0
- package/dist/features/worktree/start.js.map +1 -0
- package/dist/features/worktree/status.js +50 -0
- package/dist/features/worktree/status.js.map +1 -0
- package/dist/features/worktree/sync.js +107 -0
- package/dist/features/worktree/sync.js.map +1 -0
- package/dist/features/yarn/commands.js +18 -0
- package/dist/features/yarn/commands.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.packageProject = exports.publish = exports.finalize = exports.prepare = exports.getDistPath = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const files_1 = require("../../core/files");
|
|
10
|
+
const logger_1 = require("../../core/logger");
|
|
11
|
+
const process_1 = require("../../core/process");
|
|
12
|
+
const strings_1 = require("../../core/strings");
|
|
13
|
+
const json_1 = require("../../core/json");
|
|
14
|
+
const dependencyKeys = ['dependencies', 'peerDependencies'];
|
|
15
|
+
function readManifest(file, defaults = {}) {
|
|
16
|
+
const value = JSON.parse(node_fs_1.default.readFileSync(file, 'utf8'));
|
|
17
|
+
if (!(0, json_1.isRecord)(value))
|
|
18
|
+
throw new Error(`Expected a package object in ${file}`);
|
|
19
|
+
const manifest = { ...defaults, ...value };
|
|
20
|
+
if (typeof manifest.name !== 'string' || typeof manifest.version !== 'string')
|
|
21
|
+
throw new Error(`Expected a package name and version in ${file}`);
|
|
22
|
+
return { ...manifest, name: manifest.name, version: manifest.version };
|
|
23
|
+
}
|
|
24
|
+
function dependencies(value) {
|
|
25
|
+
if (value === undefined)
|
|
26
|
+
return {};
|
|
27
|
+
if (!(0, json_1.isRecord)(value) || Object.values(value).some((version) => typeof version !== 'string'))
|
|
28
|
+
throw new Error('Package dependencies must map names to version strings.');
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function baseName(manifest) {
|
|
32
|
+
return (0, strings_1.customTrim)(manifest.name.replaceAll('workspace', ''), '.', ' ', '/');
|
|
33
|
+
}
|
|
34
|
+
function packageDirectories(cwd, includeCore = false) {
|
|
35
|
+
return node_fs_1.default.readdirSync(node_path_1.default.join(cwd, 'packages'), { withFileTypes: true })
|
|
36
|
+
.filter((entry) => entry.isDirectory() && (includeCore || entry.name !== 'core') && !/^[_.]/.test(entry.name))
|
|
37
|
+
.map((entry) => ({ folder: entry.name, directory: node_path_1.default.join(cwd, 'packages', entry.name) }));
|
|
38
|
+
}
|
|
39
|
+
function packageData(cwd, base) {
|
|
40
|
+
return packageDirectories(cwd).map((entry) => {
|
|
41
|
+
const manifest = readManifest(node_path_1.default.join(entry.directory, 'package.json'), { name: entry.folder, version: base.version });
|
|
42
|
+
const name = manifest.name.split('/').pop()?.split('.').pop() || entry.folder;
|
|
43
|
+
return { ...entry, manifest, name: baseName(base) + '.' + name };
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function writeManifest(file, manifest) {
|
|
47
|
+
node_fs_1.default.mkdirSync(node_path_1.default.dirname(file), { recursive: true });
|
|
48
|
+
node_fs_1.default.writeFileSync(file, JSON.stringify(manifest, null, 2) + '\n');
|
|
49
|
+
}
|
|
50
|
+
function getDistPath(cwd) {
|
|
51
|
+
for (const folder of ['dist', 'build', 'temp']) {
|
|
52
|
+
const directory = node_path_1.default.join(cwd, folder);
|
|
53
|
+
if (node_fs_1.default.existsSync(directory) && node_fs_1.default.statSync(directory).isDirectory())
|
|
54
|
+
return directory;
|
|
55
|
+
}
|
|
56
|
+
throw new Error('No dist/build found. Build your files first.');
|
|
57
|
+
}
|
|
58
|
+
exports.getDistPath = getDistPath;
|
|
59
|
+
function prepare(cwd) {
|
|
60
|
+
const base = readManifest(node_path_1.default.join(cwd, 'package.json'));
|
|
61
|
+
const packages = packageData(cwd, base);
|
|
62
|
+
const directory = node_path_1.default.join(cwd, 'packages', 'core');
|
|
63
|
+
const manifest = { ...base, name: baseName(base), private: false, main: './index', homepage: '.' };
|
|
64
|
+
for (const key of ['scripts', 'source', 'workspaces', 'files', 'devDependencies'])
|
|
65
|
+
delete manifest[key];
|
|
66
|
+
for (const key of dependencyKeys)
|
|
67
|
+
manifest[key] = Object.fromEntries(packages.map((pkg) => [pkg.name, 'workspace:^']));
|
|
68
|
+
(0, files_1.removeIfExists)(directory);
|
|
69
|
+
writeManifest(node_path_1.default.join(directory, 'package.json'), manifest);
|
|
70
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(directory, 'index.ts'), packages.map((pkg) => `export * from ${JSON.stringify(pkg.name)};`).join('\n'));
|
|
71
|
+
}
|
|
72
|
+
exports.prepare = prepare;
|
|
73
|
+
async function finalize(cwd, run = process_1.runCommand, quiet = false) {
|
|
74
|
+
const base = readManifest(node_path_1.default.join(cwd, 'package.json'));
|
|
75
|
+
const dist = getDistPath(cwd);
|
|
76
|
+
const packages = packageData(cwd, base);
|
|
77
|
+
const core = readManifest(node_path_1.default.join(cwd, 'packages', 'core', 'package.json'));
|
|
78
|
+
node_fs_1.default.cpSync(node_path_1.default.join(cwd, 'packages'), node_path_1.default.join(dist, 'packages'), {
|
|
79
|
+
recursive: true,
|
|
80
|
+
filter: (entry) => !node_path_1.default.basename(entry).startsWith('.') &&
|
|
81
|
+
(node_fs_1.default.lstatSync(entry).isDirectory() || node_path_1.default.basename(entry) === 'package.json'),
|
|
82
|
+
});
|
|
83
|
+
core.version = base.version;
|
|
84
|
+
for (const key of dependencyKeys)
|
|
85
|
+
core[key] = Object.fromEntries(packages.map((pkg) => [pkg.name, base.version]));
|
|
86
|
+
writeManifest(node_path_1.default.join(dist, 'packages', 'core', 'package.json'), core);
|
|
87
|
+
for (const pkg of packages) {
|
|
88
|
+
const manifest = { ...pkg.manifest, name: pkg.name, version: base.version, description: 'module of ' + pkg.name, private: false };
|
|
89
|
+
delete manifest.scripts;
|
|
90
|
+
for (const key of dependencyKeys) {
|
|
91
|
+
const deps = { ...dependencies(manifest[key]), ...dependencies(base[key]) };
|
|
92
|
+
manifest[key] = Object.fromEntries(Object.entries(deps).map(([name, version]) => [name, version.startsWith('workspace') ? base.version : version]));
|
|
93
|
+
}
|
|
94
|
+
const directory = node_path_1.default.join(dist, 'packages', pkg.folder);
|
|
95
|
+
writeManifest(node_path_1.default.join(directory, 'package.json'), manifest);
|
|
96
|
+
await run('npm', ['pkg', 'fix'], { cwd: directory, quiet });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.finalize = finalize;
|
|
100
|
+
async function publish(cwd, run = process_1.runCommand, quiet = false) {
|
|
101
|
+
const dist = getDistPath(cwd);
|
|
102
|
+
for (const pkg of packageDirectories(cwd, true)) {
|
|
103
|
+
const directory = node_path_1.default.join(dist, 'packages', pkg.folder);
|
|
104
|
+
readManifest(node_path_1.default.join(directory, 'package.json'));
|
|
105
|
+
await run('npm', ['publish', '--access', 'public', '--tag', 'latest'], { cwd: directory, quiet });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.publish = publish;
|
|
109
|
+
async function packageProject(options, run = process_1.runCommand) {
|
|
110
|
+
const cwd = node_path_1.default.resolve(options.path ?? process.cwd());
|
|
111
|
+
switch (options.mode) {
|
|
112
|
+
case 'prepare':
|
|
113
|
+
prepare(cwd);
|
|
114
|
+
break;
|
|
115
|
+
case 'finalize':
|
|
116
|
+
await finalize(cwd, run, options.quiet);
|
|
117
|
+
break;
|
|
118
|
+
case 'publish':
|
|
119
|
+
await publish(cwd, run, options.quiet);
|
|
120
|
+
break;
|
|
121
|
+
case 'go':
|
|
122
|
+
prepare(cwd);
|
|
123
|
+
await run('yarn', ['run', 'build'], { cwd, quiet: options.quiet });
|
|
124
|
+
await finalize(cwd, run, options.quiet);
|
|
125
|
+
await publish(cwd, run, options.quiet);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
if (!options.quiet)
|
|
129
|
+
(0, logger_1.showMessage)(`Package ${options.mode} done`, 'text');
|
|
130
|
+
}
|
|
131
|
+
exports.packageProject = packageProject;
|
|
132
|
+
//# sourceMappingURL=packager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packager.js","sourceRoot":"","sources":["../../../src/features/package/packager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const options_1 = require("../../cli/options");
|
|
4
|
+
const project_type_1 = require("../../core/project-type");
|
|
5
|
+
const publish_1 = require("./publish");
|
|
6
|
+
const command = {
|
|
7
|
+
command: 'publish',
|
|
8
|
+
describe: 'Publish the current package',
|
|
9
|
+
builder: (cli) => cli.options(options_1.projectOptions),
|
|
10
|
+
handler: async (args) => { await (0, publish_1.publishProject)((0, project_type_1.loadProjectType)(args), args); },
|
|
11
|
+
};
|
|
12
|
+
exports.default = command;
|
|
13
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/features/publish/command.ts"],"names":[],"mappings":";;AACA,+CAAmD;AACnD,0DAA0E;AAC1E,uCAA2C;AAE3C,MAAM,OAAO,GAAsC;IAClD,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,6BAA6B;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,wBAAc,CAAC;IAC7C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,IAAA,wBAAc,EAAC,IAAA,8BAAe,EAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CAC/E,CAAC;AACF,kBAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.publishProject = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const process_1 = require("../../core/process");
|
|
9
|
+
const logger_1 = require("../../core/logger");
|
|
10
|
+
const build_1 = require("../build/build");
|
|
11
|
+
async function publishProject(type, options = {}, run = process_1.runCommand) {
|
|
12
|
+
const cwd = node_path_1.default.resolve(options.path ?? process.cwd());
|
|
13
|
+
const execution = { cwd, quiet: options.quiet };
|
|
14
|
+
if (type === 'yarn') {
|
|
15
|
+
await run('yarn', ['run', 'build'], execution);
|
|
16
|
+
await run('npm', ['publish', '--access', 'public', '--tag', 'latest'], execution);
|
|
17
|
+
}
|
|
18
|
+
else if (type === 'python') {
|
|
19
|
+
const files = (0, build_1.distributionFiles)(cwd);
|
|
20
|
+
await run('python', ['-m', 'pip', 'install', '--upgrade', 'twine'], execution);
|
|
21
|
+
await run('python', ['-m', 'twine', 'upload', ...files], execution);
|
|
22
|
+
}
|
|
23
|
+
else
|
|
24
|
+
throw new Error(`Publishing is not supported for ${type} projects.`);
|
|
25
|
+
if (!options.quiet)
|
|
26
|
+
(0, logger_1.showMessage)('Publish done', 'text');
|
|
27
|
+
}
|
|
28
|
+
exports.publishProject = publishProject;
|
|
29
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/features/publish/publish.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,gDAA+D;AAE/D,8CAAgD;AAChD,0CAAmD;AAE5C,KAAK,UAAU,cAAc,CAAC,IAAiB,EAAE,UAA0B,EAAE,EAAE,MAAqB,oBAAU;IACpH,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAChD,IAAI,IAAI,KAAK,MAAM,EAAE;QACpB,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;KAClF;SAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;QAC7B,MAAM,KAAK,GAAG,IAAA,yBAAiB,EAAC,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/E,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;KACpE;;QAAM,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,YAAY,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,IAAA,oBAAW,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAZD,wCAYC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateFilters = void 0;
|
|
4
|
+
const extract_1 = require("./extract");
|
|
5
|
+
const options_1 = require("./options");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
function validateFilters(options) {
|
|
8
|
+
for (const [name, value] of [['since-days', options.sinceDays], ['last', options.last]]) {
|
|
9
|
+
if (value !== undefined && (!Number.isFinite(value) || value < 0 || (name === 'last' && !Number.isInteger(value))))
|
|
10
|
+
throw new Error(`--${name} must be a nonnegative ${name === 'last' ? 'integer' : 'number'}.`);
|
|
11
|
+
}
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
exports.validateFilters = validateFilters;
|
|
15
|
+
const command = {
|
|
16
|
+
command: 'transcripts <source>',
|
|
17
|
+
describe: 'Extract AI session transcripts as Markdown',
|
|
18
|
+
builder: (cli) => cli
|
|
19
|
+
.positional('source', { type: 'string', choices: types_1.sourceNames, demandOption: true })
|
|
20
|
+
.options(options_1.transcript_filter_options)
|
|
21
|
+
.option('list', { type: 'boolean', describe: 'List projects without writing files' })
|
|
22
|
+
.option('out', { type: 'string', describe: 'Output directory' })
|
|
23
|
+
.check((args) => validateFilters({ sinceDays: args['since-days'], last: args.last })),
|
|
24
|
+
handler: async (args) => { await (0, extract_1.extractTranscripts)(extract_1.transcript_sources[args.source], args); },
|
|
25
|
+
};
|
|
26
|
+
exports.default = command;
|
|
27
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/features/transcripts/command.ts"],"names":[],"mappings":";;;AACA,uCAAmE;AACnE,uCAAsD;AACtD,mCAAkE;AAGlE,SAAgB,eAAe,CAAC,OAAuB;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAU,EAAE;QACjG,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YACjH,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,0BAA0B,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC/F;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAND,0CAMC;AAED,MAAM,OAAO,GAAyC;IACrD,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG;SACnB,UAAU,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAW,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SAClF,OAAO,CAAC,mCAAyB,CAAC;SAClC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,qCAAqC,EAAE,CAAC;SACpF,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;SAC/D,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,IAAA,4BAAkB,EAAC,4BAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CAC7F,CAAC;AACF,kBAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Collects session stats and writes session transcripts (Claude Code, Codex) as Markdown files */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.extractTranscripts = exports.collectSession = exports.sessionFiles = exports.transcript_sources = void 0;
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const logger_1 = require("../../core/logger");
|
|
12
|
+
const files_1 = require("../../core/files");
|
|
13
|
+
const claude_1 = require("./sources/claude");
|
|
14
|
+
const codex_1 = require("./sources/codex");
|
|
15
|
+
const options_1 = require("./options");
|
|
16
|
+
const render_markdown_1 = require("./render-markdown");
|
|
17
|
+
const jsonl_1 = require("./jsonl");
|
|
18
|
+
exports.transcript_sources = {
|
|
19
|
+
claude: claude_1.claude_source,
|
|
20
|
+
codex: codex_1.codex_source,
|
|
21
|
+
};
|
|
22
|
+
/* -------------------------------------------------------------------------- */
|
|
23
|
+
/* Sessions */
|
|
24
|
+
/* -------------------------------------------------------------------------- */
|
|
25
|
+
function sessionFiles(session, opts) {
|
|
26
|
+
return opts.includeSubagents ? [session.file, ...session.subFiles] : [session.file];
|
|
27
|
+
}
|
|
28
|
+
exports.sessionFiles = sessionFiles;
|
|
29
|
+
async function collectSession(source, session, files) {
|
|
30
|
+
const info = {
|
|
31
|
+
sessionId: session.sessionId,
|
|
32
|
+
file: '',
|
|
33
|
+
cwd: '',
|
|
34
|
+
gitBranch: '',
|
|
35
|
+
summary: '',
|
|
36
|
+
started: '',
|
|
37
|
+
ended: '',
|
|
38
|
+
records: 0,
|
|
39
|
+
userMessages: 0,
|
|
40
|
+
toolUsage: {},
|
|
41
|
+
};
|
|
42
|
+
let titleRank = -1;
|
|
43
|
+
let first = Infinity;
|
|
44
|
+
let last = -Infinity;
|
|
45
|
+
for (const entries of (0, jsonl_1.sessionEntries)(source, files)) {
|
|
46
|
+
for await (const e of entries) {
|
|
47
|
+
info.records++;
|
|
48
|
+
if (!info.cwd && e.cwd)
|
|
49
|
+
info.cwd = e.cwd;
|
|
50
|
+
if (!info.gitBranch && e.gitBranch)
|
|
51
|
+
info.gitBranch = e.gitBranch;
|
|
52
|
+
if (e.title && e.title.rank >= titleRank)
|
|
53
|
+
[titleRank, info.summary] = [e.title.rank, e.title.text];
|
|
54
|
+
const t = Date.parse(e.timestamp ?? '');
|
|
55
|
+
if (!isNaN(t)) {
|
|
56
|
+
if (t < first)
|
|
57
|
+
[first, info.started] = [t, e.timestamp];
|
|
58
|
+
if (t > last)
|
|
59
|
+
[last, info.ended] = [t, e.timestamp];
|
|
60
|
+
}
|
|
61
|
+
for (const p of e.parts) {
|
|
62
|
+
if (p.kind === 'user' && !e.sidechain)
|
|
63
|
+
info.userMessages++;
|
|
64
|
+
if (p.kind === 'tool_call' && p.toolName)
|
|
65
|
+
info.toolUsage[p.toolName] = (info.toolUsage[p.toolName] ?? 0) + 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (session.title)
|
|
70
|
+
info.summary = session.title;
|
|
71
|
+
info.toolUsage = Object.fromEntries(Object.entries(info.toolUsage).sort((a, b) => b[1] - a[1]));
|
|
72
|
+
return info;
|
|
73
|
+
}
|
|
74
|
+
exports.collectSession = collectSession;
|
|
75
|
+
/* -------------------------------------------------------------------------- */
|
|
76
|
+
/* Extract */
|
|
77
|
+
/* -------------------------------------------------------------------------- */
|
|
78
|
+
/**
|
|
79
|
+
* List the projects of a source and write one Markdown file per session plus index.json.
|
|
80
|
+
* args: out, project, sinceDays, last, list, userOnly, includeTools, includeThinking, includeSubagents
|
|
81
|
+
*/
|
|
82
|
+
async function extractTranscripts(source, args) {
|
|
83
|
+
if (!node_fs_1.default.existsSync(source.root))
|
|
84
|
+
throw new Error(`${source.name} data folder not found: ${source.root}`);
|
|
85
|
+
const initialBadLines = jsonl_1.read_stats.badLines;
|
|
86
|
+
const outDir = node_path_1.default.resolve(args.out || node_path_1.default.join(options_1.default_out_root, source.name));
|
|
87
|
+
const needles = (args.project ?? []).map((p) => p.toLowerCase());
|
|
88
|
+
const sinceMs = Number(args.sinceDays) > 0 ? Date.now() - Number(args.sinceDays) * 86400000 : 0;
|
|
89
|
+
const opts = {
|
|
90
|
+
userOnly: !!args.userOnly,
|
|
91
|
+
includeTools: args.includeTools ?? true,
|
|
92
|
+
includeThinking: args.includeThinking ?? true,
|
|
93
|
+
includeSubagents: !!args.includeSubagents,
|
|
94
|
+
};
|
|
95
|
+
const projects = (await source.listProjects())
|
|
96
|
+
.filter(({ folder, cwd }) => {
|
|
97
|
+
const haystack = [folder.toLowerCase(), cwd.toLowerCase()];
|
|
98
|
+
return needles.length === 0 || needles.some((n) => haystack.some((h) => h.includes(n)));
|
|
99
|
+
})
|
|
100
|
+
.map((p) => ({ ...p, sessions: p.sessions.filter((s) => s.mtime >= sinceMs) }))
|
|
101
|
+
.sort((a, b) => a.folder.localeCompare(b.folder));
|
|
102
|
+
/* --last n: the n most recently modified sessions across all matched projects */
|
|
103
|
+
if (Number(args.last) > 0) {
|
|
104
|
+
const keep = new Set(projects
|
|
105
|
+
.flatMap((p) => p.sessions)
|
|
106
|
+
.sort((a, b) => b.mtime - a.mtime)
|
|
107
|
+
.slice(0, Number(args.last)));
|
|
108
|
+
for (const p of projects)
|
|
109
|
+
p.sessions = p.sessions.filter((s) => keep.has(s));
|
|
110
|
+
}
|
|
111
|
+
const index = [];
|
|
112
|
+
let totalProjects = 0;
|
|
113
|
+
let totalSessions = 0;
|
|
114
|
+
for (const { folder, cwd, sessions } of projects) {
|
|
115
|
+
if (sessions.length === 0)
|
|
116
|
+
continue;
|
|
117
|
+
totalProjects++;
|
|
118
|
+
totalSessions += sessions.length;
|
|
119
|
+
if (!args.quiet)
|
|
120
|
+
(0, logger_1.showMessage)([chalk_1.default.cyan(folder), chalk_1.default.yellow(`${sessions.length} sessions`), chalk_1.default.gray(cwd || '-')]);
|
|
121
|
+
if (args.list)
|
|
122
|
+
continue;
|
|
123
|
+
const project = { folder, cwd, sessions: [] };
|
|
124
|
+
node_fs_1.default.mkdirSync((0, files_1.resolveInside)(outDir, folder), { recursive: true });
|
|
125
|
+
for (const s of sessions) {
|
|
126
|
+
const files = sessionFiles(s, opts);
|
|
127
|
+
const info = await collectSession(source, s, files);
|
|
128
|
+
info.file = `${folder}/${s.sessionId}.md`;
|
|
129
|
+
await (0, render_markdown_1.writeSession)((0, files_1.resolveInside)(outDir, info.file), source, files, info, opts);
|
|
130
|
+
project.sessions.push(info);
|
|
131
|
+
}
|
|
132
|
+
project.sessions.sort((a, b) => a.started.localeCompare(b.started));
|
|
133
|
+
index.push(project);
|
|
134
|
+
}
|
|
135
|
+
const badLines = jsonl_1.read_stats.badLines - initialBadLines;
|
|
136
|
+
const skipped = badLines > 0 ? `, ${badLines} malformed lines skipped` : '';
|
|
137
|
+
if (!args.list) {
|
|
138
|
+
node_fs_1.default.mkdirSync(outDir, { recursive: true });
|
|
139
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(outDir, 'index.json'), JSON.stringify(index, null, 2));
|
|
140
|
+
}
|
|
141
|
+
if (!args.quiet)
|
|
142
|
+
(0, logger_1.showMessage)(chalk_1.default.green(`total: ${totalProjects} projects, ${totalSessions} sessions${skipped}`));
|
|
143
|
+
if (!args.quiet && !args.list)
|
|
144
|
+
(0, logger_1.showMessage)(chalk_1.default.gray('output: ' + outDir));
|
|
145
|
+
return { outDir, index };
|
|
146
|
+
}
|
|
147
|
+
exports.extractTranscripts = extractTranscripts;
|
|
148
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/features/transcripts/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Shared types and readers for AI tool session transcripts (Claude Code, Codex) */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.sessionEntries = exports.blocksText = exports.folderFromCwd = exports.mergeByTime = exports.readJsonl = exports.read_stats = void 0;
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_readline_1 = __importDefault(require("node:readline"));
|
|
10
|
+
const json_1 = require("../../core/json");
|
|
11
|
+
/** Counts lines that could not be parsed, across all reads */
|
|
12
|
+
exports.read_stats = { badLines: 0 };
|
|
13
|
+
/**
|
|
14
|
+
* Stream records of a JSONL file one line at a time, skipping malformed lines
|
|
15
|
+
*/
|
|
16
|
+
async function* readJsonl(file) {
|
|
17
|
+
const input = node_fs_1.default.createReadStream(file, { encoding: 'utf8' });
|
|
18
|
+
const rl = node_readline_1.default.createInterface({ input, crlfDelay: Infinity });
|
|
19
|
+
try {
|
|
20
|
+
for await (const line of rl) {
|
|
21
|
+
if (!line.trim())
|
|
22
|
+
continue;
|
|
23
|
+
let rec;
|
|
24
|
+
try {
|
|
25
|
+
rec = JSON.parse(line);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
exports.read_stats.badLines++;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if ((0, json_1.isRecord)(rec))
|
|
32
|
+
yield rec;
|
|
33
|
+
else
|
|
34
|
+
exports.read_stats.badLines++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
rl.close();
|
|
39
|
+
input.destroy();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.readJsonl = readJsonl;
|
|
43
|
+
function entryTime(e) {
|
|
44
|
+
const t = Date.parse(e.timestamp ?? '');
|
|
45
|
+
return isNaN(t) ? -Infinity : t;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Merge several entry streams into one, ordered by timestamp.
|
|
49
|
+
* Entries without a timestamp are passed through as soon as they are read.
|
|
50
|
+
*/
|
|
51
|
+
async function* mergeByTime(sources) {
|
|
52
|
+
try {
|
|
53
|
+
const heads = await Promise.all(sources.map((s) => s.next()));
|
|
54
|
+
while (true) {
|
|
55
|
+
let best = -1;
|
|
56
|
+
for (let i = 0; i < heads.length; i++) {
|
|
57
|
+
const h = heads[i];
|
|
58
|
+
if (h.done)
|
|
59
|
+
continue;
|
|
60
|
+
if (best < 0 || entryTime(h.value) < entryTime(heads[best].value))
|
|
61
|
+
best = i;
|
|
62
|
+
}
|
|
63
|
+
if (best < 0)
|
|
64
|
+
return;
|
|
65
|
+
yield heads[best].value;
|
|
66
|
+
heads[best] = await sources[best].next();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
await Promise.all(sources.map((source) => source.return(undefined)));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.mergeByTime = mergeByTime;
|
|
74
|
+
/**
|
|
75
|
+
* Same folder naming Claude Code uses for ~/.claude/projects.
|
|
76
|
+
* The Windows drive letter is lowercased so c:\x and C:\x end up in one folder.
|
|
77
|
+
*/
|
|
78
|
+
function folderFromCwd(cwd) {
|
|
79
|
+
return cwd.replace(/^[A-Z]:/, (d) => d.toLowerCase()).replace(/[^a-zA-Z0-9]/g, '-');
|
|
80
|
+
}
|
|
81
|
+
exports.folderFromCwd = folderFromCwd;
|
|
82
|
+
/** Tool output that is a string or an array of content blocks */
|
|
83
|
+
function blocksText(content) {
|
|
84
|
+
if (typeof content === 'string')
|
|
85
|
+
return content;
|
|
86
|
+
if (!Array.isArray(content))
|
|
87
|
+
return content == null ? '' : JSON.stringify(content, null, 2);
|
|
88
|
+
return content
|
|
89
|
+
.map((value) => {
|
|
90
|
+
const b = (0, json_1.asRecord)(value);
|
|
91
|
+
return typeof b.text === 'string' ? b.text : `[${b.type ?? 'unknown'}]`;
|
|
92
|
+
})
|
|
93
|
+
.join('\n');
|
|
94
|
+
}
|
|
95
|
+
exports.blocksText = blocksText;
|
|
96
|
+
function sessionEntries(source, files) {
|
|
97
|
+
return files.map((file, i) => source.readEntries(file, i > 0));
|
|
98
|
+
}
|
|
99
|
+
exports.sessionEntries = sessionEntries;
|
|
100
|
+
//# sourceMappingURL=jsonl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../../src/features/transcripts/jsonl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Constants of the transcripts and optimize-transcripts commands */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.transcript_filter_options = exports.max_tool_chars = exports.default_out_root = void 0;
|
|
8
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
/** Outside any repo, so extracted transcripts are never committed by accident */
|
|
11
|
+
exports.default_out_root = node_path_1.default.join(node_os_1.default.homedir(), 'ai-transcripts');
|
|
12
|
+
/** Tool calls and results longer than this are cut in transcripts */
|
|
13
|
+
exports.max_tool_chars = 2000;
|
|
14
|
+
/* -------------------------------------------------------------------------- */
|
|
15
|
+
/* Options */
|
|
16
|
+
/* -------------------------------------------------------------------------- */
|
|
17
|
+
/** Options shared by the transcripts and optimize-transcripts commands */
|
|
18
|
+
exports.transcript_filter_options = {
|
|
19
|
+
project: {
|
|
20
|
+
describe: 'only projects whose folder or cwd contains this text (repeatable)',
|
|
21
|
+
type: 'string',
|
|
22
|
+
array: true,
|
|
23
|
+
},
|
|
24
|
+
'since-days': {
|
|
25
|
+
describe: 'only session files modified in the last n days, 0 for all',
|
|
26
|
+
type: 'number',
|
|
27
|
+
default: 7,
|
|
28
|
+
},
|
|
29
|
+
last: {
|
|
30
|
+
describe: 'only the n most recently modified sessions across the matched projects',
|
|
31
|
+
type: 'number',
|
|
32
|
+
},
|
|
33
|
+
'user-only': {
|
|
34
|
+
describe: "only the human's text messages",
|
|
35
|
+
type: 'boolean',
|
|
36
|
+
},
|
|
37
|
+
'include-tools': {
|
|
38
|
+
describe: 'include tool calls and results (cut to 2000 chars), --no-include-tools to leave out',
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
default: true,
|
|
41
|
+
},
|
|
42
|
+
'include-thinking': {
|
|
43
|
+
describe: 'include thinking blocks as quotes, --no-include-thinking to leave out',
|
|
44
|
+
type: 'boolean',
|
|
45
|
+
default: true,
|
|
46
|
+
},
|
|
47
|
+
'include-subagents': {
|
|
48
|
+
describe: 'include subagent (sidechain) messages',
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
default: false,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/features/transcripts/options.ts"],"names":[],"mappings":";AAAA,oEAAoE;;;;;;AAEpE,sDAAyB;AACzB,0DAA6B;AAG7B,iFAAiF;AACpE,QAAA,gBAAgB,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC1E,qEAAqE;AACxD,QAAA,cAAc,GAAG,IAAI,CAAC;AAEnC,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,0EAA0E;AAC7D,QAAA,yBAAyB,GAAG;IACxC,OAAO,EAAE;QACR,QAAQ,EAAE,mEAAmE;QAC7E,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;KACX;IACD,YAAY,EAAE;QACb,QAAQ,EAAE,2DAA2D;QACrE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC;KACV;IACD,IAAI,EAAE;QACL,QAAQ,EAAE,wEAAwE;QAClF,IAAI,EAAE,QAAQ;KACd;IACD,WAAW,EAAE;QACZ,QAAQ,EAAE,gCAAgC;QAC1C,IAAI,EAAE,SAAS;KACf;IACD,eAAe,EAAE;QAChB,QAAQ,EAAE,qFAAqF;QAC/F,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACb;IACD,kBAAkB,EAAE;QACnB,QAAQ,EAAE,uEAAuE;QACjF,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;KACb;IACD,mBAAmB,EAAE;QACpB,QAAQ,EAAE,uCAAuC;QACjD,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACd;CACiC,CAAC"}
|