@rasensio/aidlc 1.8.0 → 1.9.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/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/add-action.d.ts.map +1 -1
- package/dist/commands/add-action.js +2 -3
- package/dist/commands/add-action.js.map +1 -1
- package/dist/commands/add-skill.d.ts +28 -0
- package/dist/commands/add-skill.d.ts.map +1 -0
- package/dist/commands/add-skill.js +315 -0
- package/dist/commands/add-skill.js.map +1 -0
- package/dist/commands/add.d.ts +25 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +29 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/cost.d.ts +2 -0
- package/dist/commands/cost.d.ts.map +1 -1
- package/dist/commands/cost.js +16 -1
- package/dist/commands/cost.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +1 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +1 -9
- package/dist/commands/update.js.map +1 -1
- package/dist/compile/adapters/claude-code.d.ts.map +1 -1
- package/dist/compile/adapters/claude-code.js +3 -24
- package/dist/compile/adapters/claude-code.js.map +1 -1
- package/dist/compile/adapters/codex.d.ts.map +1 -1
- package/dist/compile/adapters/codex.js +3 -2
- package/dist/compile/adapters/codex.js.map +1 -1
- package/dist/compile/adapters/cursor.d.ts.map +1 -1
- package/dist/compile/adapters/cursor.js +4 -2
- package/dist/compile/adapters/cursor.js.map +1 -1
- package/dist/compile/adapters/kiro.d.ts.map +1 -1
- package/dist/compile/adapters/kiro.js +6 -10
- package/dist/compile/adapters/kiro.js.map +1 -1
- package/dist/compile/adapters/windsurf.d.ts.map +1 -1
- package/dist/compile/adapters/windsurf.js +9 -11
- package/dist/compile/adapters/windsurf.js.map +1 -1
- package/dist/compile/content-root.d.ts +22 -0
- package/dist/compile/content-root.d.ts.map +1 -0
- package/dist/compile/content-root.js +28 -0
- package/dist/compile/content-root.js.map +1 -0
- package/dist/compile/limits.d.ts +20 -0
- package/dist/compile/limits.d.ts.map +1 -0
- package/dist/compile/limits.js +20 -0
- package/dist/compile/limits.js.map +1 -0
- package/dist/compile/naming.d.ts +92 -0
- package/dist/compile/naming.d.ts.map +1 -0
- package/dist/compile/naming.js +105 -0
- package/dist/compile/naming.js.map +1 -0
- package/dist/cost/providers/claude-code.d.ts +2 -0
- package/dist/cost/providers/claude-code.d.ts.map +1 -1
- package/dist/cost/providers/claude-code.js +34 -12
- package/dist/cost/providers/claude-code.js.map +1 -1
- package/dist/cost/providers/kiro.d.ts.map +1 -1
- package/dist/cost/providers/kiro.js +23 -10
- package/dist/cost/providers/kiro.js.map +1 -1
- package/dist/cost/providers/provider.d.ts +9 -4
- package/dist/cost/providers/provider.d.ts.map +1 -1
- package/dist/cost/providers/provider.js.map +1 -1
- package/dist/cost/recorder.d.ts +27 -3
- package/dist/cost/recorder.d.ts.map +1 -1
- package/dist/cost/recorder.js +116 -11
- package/dist/cost/recorder.js.map +1 -1
- package/dist/cost/sync.js +2 -2
- package/dist/cost/sync.js.map +1 -1
- package/dist/cost/types.d.ts +20 -0
- package/dist/cost/types.d.ts.map +1 -1
- package/dist/cost/types.js +2 -0
- package/dist/cost/types.js.map +1 -1
- package/dist/doctor/migrations/index.d.ts.map +1 -1
- package/dist/doctor/migrations/index.js +2 -0
- package/dist/doctor/migrations/index.js.map +1 -1
- package/dist/doctor/migrations/prune-capture-log.d.ts +11 -0
- package/dist/doctor/migrations/prune-capture-log.d.ts.map +1 -0
- package/dist/doctor/migrations/prune-capture-log.js +31 -0
- package/dist/doctor/migrations/prune-capture-log.js.map +1 -0
- package/dist/operational/discover.d.ts +89 -0
- package/dist/operational/discover.d.ts.map +1 -0
- package/dist/operational/discover.js +132 -0
- package/dist/operational/discover.js.map +1 -0
- package/dist/operational/emit.d.ts +93 -0
- package/dist/operational/emit.d.ts.map +1 -0
- package/dist/operational/emit.js +227 -0
- package/dist/operational/emit.js.map +1 -0
- package/dist/operational/knowledge.d.ts +64 -0
- package/dist/operational/knowledge.d.ts.map +1 -0
- package/dist/operational/knowledge.js +144 -0
- package/dist/operational/knowledge.js.map +1 -0
- package/dist/operational/packagers.d.ts +67 -0
- package/dist/operational/packagers.d.ts.map +1 -0
- package/dist/operational/packagers.js +252 -0
- package/dist/operational/packagers.js.map +1 -0
- package/dist/operational/redact.d.ts +49 -0
- package/dist/operational/redact.d.ts.map +1 -0
- package/dist/operational/redact.js +135 -0
- package/dist/operational/redact.js.map +1 -0
- package/dist/operational/schema.d.ts +80 -0
- package/dist/operational/schema.d.ts.map +1 -0
- package/dist/operational/schema.js +205 -0
- package/dist/operational/schema.js.map +1 -0
- package/dist/operational/verify.d.ts +100 -0
- package/dist/operational/verify.d.ts.map +1 -0
- package/dist/operational/verify.js +175 -0
- package/dist/operational/verify.js.map +1 -0
- package/package.json +2 -2
|
@@ -20,24 +20,22 @@
|
|
|
20
20
|
*
|
|
21
21
|
* @module
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
/** Maximum characters allowed per rule file. */
|
|
27
|
-
const MAX_FILE_CHARS = 6000;
|
|
28
|
-
/** Maximum total characters across all rule files. */
|
|
29
|
-
const MAX_TOTAL_CHARS = 12000;
|
|
30
|
-
/** Warning threshold — warn when total approaches this percentage of the limit. */
|
|
31
|
-
const TOTAL_WARN_THRESHOLD = 0.85;
|
|
23
|
+
import { prefixedRuleFilename, skillSlug as sharedSkillSlug } from '../naming.js';
|
|
24
|
+
import { MAX_FILE_CHARS, MAX_TOTAL_CHARS, TOTAL_WARN_THRESHOLD } from '../limits.js';
|
|
32
25
|
// ---------------------------------------------------------------------------
|
|
33
26
|
// Helpers
|
|
34
27
|
// ---------------------------------------------------------------------------
|
|
35
28
|
/**
|
|
36
29
|
* Derive a short filename-safe slug from a skill name.
|
|
37
30
|
* E.g., "aidlc-implementation" -> "aidlc-implementation"
|
|
31
|
+
*
|
|
32
|
+
* Windsurf's slug is deliberately weaker than the claude-code/kiro directory
|
|
33
|
+
* convention — it neither collapses hyphen runs nor truncates. Shared via
|
|
34
|
+
* naming.ts but kept distinct, because unifying them would change windsurf's
|
|
35
|
+
* output for non-conforming names and AC-33 forbids that here.
|
|
38
36
|
*/
|
|
39
37
|
function skillSlug(skill) {
|
|
40
|
-
return skill.meta.name
|
|
38
|
+
return sharedSkillSlug(skill.meta.name);
|
|
41
39
|
}
|
|
42
40
|
/**
|
|
43
41
|
* Determine the canonical skill filename for `.aidlc/skills/`.
|
|
@@ -214,7 +212,7 @@ export const windsurfAdapter = {
|
|
|
214
212
|
totalChars += ruleContent.length;
|
|
215
213
|
ops.push({
|
|
216
214
|
kind: 'create',
|
|
217
|
-
path: `.windsurf/rules
|
|
215
|
+
path: `.windsurf/rules/${prefixedRuleFilename(skillSlug(skill), '.md')}`,
|
|
218
216
|
content: ruleContent,
|
|
219
217
|
});
|
|
220
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../src/compile/adapters/windsurf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../../src/compile/adapters/windsurf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-package location.
|
|
3
|
+
*
|
|
4
|
+
* `init.ts` and `update.ts` each defined this privately and identically. The
|
|
5
|
+
* operational-skill emitter is the third caller — it reads the verification-steps
|
|
6
|
+
* source straight from the installed package rather than from a project-level
|
|
7
|
+
* `.aidlc/guidance/` directory (AC-36) — so it moves here rather than being
|
|
8
|
+
* copied a third time.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the content package root directory (where `skills/`, `guidance/`,
|
|
14
|
+
* `templates/`, and `capabilities/` live).
|
|
15
|
+
*
|
|
16
|
+
* Uses module resolution rather than a relative path so it works from a global
|
|
17
|
+
* install, a workspace link, and a linked worktree alike.
|
|
18
|
+
*
|
|
19
|
+
* @returns Absolute path to the `@rasensio/aidlc-content` package root.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getContentPackageRoot(): string;
|
|
22
|
+
//# sourceMappingURL=content-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-root.d.ts","sourceRoot":"","sources":["../../src/compile/content-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-package location.
|
|
3
|
+
*
|
|
4
|
+
* `init.ts` and `update.ts` each defined this privately and identically. The
|
|
5
|
+
* operational-skill emitter is the third caller — it reads the verification-steps
|
|
6
|
+
* source straight from the installed package rather than from a project-level
|
|
7
|
+
* `.aidlc/guidance/` directory (AC-36) — so it moves here rather than being
|
|
8
|
+
* copied a third time.
|
|
9
|
+
*
|
|
10
|
+
* @module
|
|
11
|
+
*/
|
|
12
|
+
import { createRequire } from 'node:module';
|
|
13
|
+
import { dirname } from 'node:path';
|
|
14
|
+
/**
|
|
15
|
+
* Resolve the content package root directory (where `skills/`, `guidance/`,
|
|
16
|
+
* `templates/`, and `capabilities/` live).
|
|
17
|
+
*
|
|
18
|
+
* Uses module resolution rather than a relative path so it works from a global
|
|
19
|
+
* install, a workspace link, and a linked worktree alike.
|
|
20
|
+
*
|
|
21
|
+
* @returns Absolute path to the `@rasensio/aidlc-content` package root.
|
|
22
|
+
*/
|
|
23
|
+
export function getContentPackageRoot() {
|
|
24
|
+
const require = createRequire(import.meta.url);
|
|
25
|
+
const contentPkgPath = require.resolve('@rasensio/aidlc-content/package.json');
|
|
26
|
+
return dirname(contentPkgPath);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=content-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-root.js","sourceRoot":"","sources":["../../src/compile/content-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-imposed size budgets for emitted rule files.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from the windsurf adapter so operational packaging can enforce the
|
|
5
|
+
* same per-file ceiling instead of hardcoding a second copy of the number.
|
|
6
|
+
*
|
|
7
|
+
* Known limitation (AC-48): `MAX_TOTAL_CHARS` is enforced *within* a single
|
|
8
|
+
* InstallPlan. Framework and operational emission produce separate plans, so
|
|
9
|
+
* neither sees the other's contribution to the total. The per-file cap is
|
|
10
|
+
* enforced for both; the cross-plan total is not.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
/** Windsurf per-rule-file character ceiling. */
|
|
15
|
+
export declare const MAX_FILE_CHARS = 6000;
|
|
16
|
+
/** Windsurf total-rules character ceiling across all rule files. */
|
|
17
|
+
export declare const MAX_TOTAL_CHARS = 12000;
|
|
18
|
+
/** Fraction of a ceiling at which a warning is emitted. */
|
|
19
|
+
export declare const TOTAL_WARN_THRESHOLD = 0.85;
|
|
20
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/compile/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gDAAgD;AAChD,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,oEAAoE;AACpE,eAAO,MAAM,eAAe,QAAQ,CAAC;AAErC,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,OAAO,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-imposed size budgets for emitted rule files.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from the windsurf adapter so operational packaging can enforce the
|
|
5
|
+
* same per-file ceiling instead of hardcoding a second copy of the number.
|
|
6
|
+
*
|
|
7
|
+
* Known limitation (AC-48): `MAX_TOTAL_CHARS` is enforced *within* a single
|
|
8
|
+
* InstallPlan. Framework and operational emission produce separate plans, so
|
|
9
|
+
* neither sees the other's contribution to the total. The per-file cap is
|
|
10
|
+
* enforced for both; the cross-plan total is not.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
/** Windsurf per-rule-file character ceiling. */
|
|
15
|
+
export const MAX_FILE_CHARS = 6000;
|
|
16
|
+
/** Windsurf total-rules character ceiling across all rule files. */
|
|
17
|
+
export const MAX_TOTAL_CHARS = 12000;
|
|
18
|
+
/** Fraction of a ceiling at which a warning is emitted. */
|
|
19
|
+
export const TOTAL_WARN_THRESHOLD = 0.85;
|
|
20
|
+
//# sourceMappingURL=limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/compile/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gDAAgD;AAChD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared skill-naming conventions for platform packaging.
|
|
3
|
+
*
|
|
4
|
+
* Before this module the five adapters each restated their own naming rules in
|
|
5
|
+
* a private helper, so framework and operational packaging could drift apart
|
|
6
|
+
* (AC-34). The helpers were *not* equivalent — they implemented three distinct
|
|
7
|
+
* behaviours — so this module exposes the behaviour space explicitly rather than
|
|
8
|
+
* collapsing them into one function and silently changing adapter output:
|
|
9
|
+
*
|
|
10
|
+
* | Caller | Function | Behaviour |
|
|
11
|
+
* |---------------------|---------------------------|---------------------------------------------|
|
|
12
|
+
* | claude-code, kiro | `normalizeSkillName` | substitute, collapse, trim, prefix, truncate |
|
|
13
|
+
* | windsurf | `skillSlug` | lowercase + substitute only |
|
|
14
|
+
* | cursor, codex | `canonicalSkillFilename` | pass-through |
|
|
15
|
+
*
|
|
16
|
+
* Prefixing is a caller choice, never unconditional (AC-41): framework emission
|
|
17
|
+
* passes `prefix: true`, operational emission passes `prefix: false`. That is
|
|
18
|
+
* what lets operational skills stay out of the reserved `aidlc-` namespace
|
|
19
|
+
* (AC-19) while still reusing these conventions.
|
|
20
|
+
*
|
|
21
|
+
* Requirements: AC-19, AC-33, AC-34, AC-41
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
/** Maximum length for a platform skill directory or file name. */
|
|
26
|
+
export declare const MAX_SKILL_NAME_LENGTH = 64;
|
|
27
|
+
/** The namespace prefix reserved for framework-owned skills. */
|
|
28
|
+
export declare const FRAMEWORK_PREFIX = "aidlc-";
|
|
29
|
+
/** Options controlling how a skill name becomes a path segment. */
|
|
30
|
+
export interface SkillNameOpts {
|
|
31
|
+
/**
|
|
32
|
+
* Apply the reserved `aidlc-` framework prefix. Always explicit — an
|
|
33
|
+
* unconditional prefix is what made AC-19 and AC-34 contradictory (AC-41).
|
|
34
|
+
*/
|
|
35
|
+
prefix: boolean;
|
|
36
|
+
/** Collapse runs of hyphens and trim leading/trailing ones. Default true. */
|
|
37
|
+
collapse?: boolean;
|
|
38
|
+
/** Truncate to this length. Default `MAX_SKILL_NAME_LENGTH`; 0 disables. */
|
|
39
|
+
truncate?: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Normalize a skill name into a filesystem-safe path segment.
|
|
43
|
+
*
|
|
44
|
+
* This is the claude-code / kiro directory convention: lowercase, non-charset
|
|
45
|
+
* characters substituted with hyphens, hyphen runs collapsed, ends trimmed,
|
|
46
|
+
* optionally prefixed, then truncated.
|
|
47
|
+
*
|
|
48
|
+
* @param name - Raw skill name.
|
|
49
|
+
* @param opts - Prefix choice plus optional collapse/truncate overrides.
|
|
50
|
+
* @returns A lowercase hyphenated segment safe to use as a directory name.
|
|
51
|
+
*/
|
|
52
|
+
export declare function normalizeSkillName(name: string, opts: SkillNameOpts): string;
|
|
53
|
+
/**
|
|
54
|
+
* Windsurf's weaker slug: lowercase and substitute, but neither collapse nor
|
|
55
|
+
* truncate nor prefix.
|
|
56
|
+
*
|
|
57
|
+
* Deliberately not unified with `normalizeSkillName`. The two agree on every
|
|
58
|
+
* name shipped today (all are already lowercase-hyphenated), but they diverge on
|
|
59
|
+
* non-conforming input, and changing windsurf's output would violate AC-33.
|
|
60
|
+
* `test/golden-adapters-refactor.test.ts` pins the difference.
|
|
61
|
+
*
|
|
62
|
+
* @param name - Raw skill name.
|
|
63
|
+
* @returns A lowercase slug with non-charset characters substituted.
|
|
64
|
+
*/
|
|
65
|
+
export declare function skillSlug(name: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* The canonical `.aidlc/skills/` filename convention: the skill name verbatim
|
|
68
|
+
* plus `.md`.
|
|
69
|
+
*
|
|
70
|
+
* Used by claude-code, kiro, cursor, and codex. Windsurf routes its canonical
|
|
71
|
+
* filename through `skillSlug` instead — a pre-existing inconsistency preserved
|
|
72
|
+
* here rather than fixed, per AC-33.
|
|
73
|
+
*
|
|
74
|
+
* @param name - Raw skill name.
|
|
75
|
+
* @returns `<name>.md`.
|
|
76
|
+
*/
|
|
77
|
+
export declare function canonicalSkillFilename(name: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Build a platform rule/file name carrying the framework prefix.
|
|
80
|
+
*
|
|
81
|
+
* Several adapters built this prefix inline in a template literal
|
|
82
|
+
* (`.cursor/rules/aidlc-${name}.mdc`), which meant re-pointing the helpers alone
|
|
83
|
+
* would have left the convention restated per platform — the drift AC-34 exists
|
|
84
|
+
* to prevent. Note this reproduces the existing double-prefix for framework
|
|
85
|
+
* skills (`aidlc-aidlc-overview`), which AC-33 requires us to preserve.
|
|
86
|
+
*
|
|
87
|
+
* @param name - Raw skill name (or slug).
|
|
88
|
+
* @param ext - File extension including the dot, e.g. `.mdc`.
|
|
89
|
+
* @returns `aidlc-<name><ext>`.
|
|
90
|
+
*/
|
|
91
|
+
export declare function prefixedRuleFilename(name: string, ext: string): string;
|
|
92
|
+
//# sourceMappingURL=naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../../src/compile/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAQxC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,WAAW,CAAC;AAEzC,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAmB5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared skill-naming conventions for platform packaging.
|
|
3
|
+
*
|
|
4
|
+
* Before this module the five adapters each restated their own naming rules in
|
|
5
|
+
* a private helper, so framework and operational packaging could drift apart
|
|
6
|
+
* (AC-34). The helpers were *not* equivalent — they implemented three distinct
|
|
7
|
+
* behaviours — so this module exposes the behaviour space explicitly rather than
|
|
8
|
+
* collapsing them into one function and silently changing adapter output:
|
|
9
|
+
*
|
|
10
|
+
* | Caller | Function | Behaviour |
|
|
11
|
+
* |---------------------|---------------------------|---------------------------------------------|
|
|
12
|
+
* | claude-code, kiro | `normalizeSkillName` | substitute, collapse, trim, prefix, truncate |
|
|
13
|
+
* | windsurf | `skillSlug` | lowercase + substitute only |
|
|
14
|
+
* | cursor, codex | `canonicalSkillFilename` | pass-through |
|
|
15
|
+
*
|
|
16
|
+
* Prefixing is a caller choice, never unconditional (AC-41): framework emission
|
|
17
|
+
* passes `prefix: true`, operational emission passes `prefix: false`. That is
|
|
18
|
+
* what lets operational skills stay out of the reserved `aidlc-` namespace
|
|
19
|
+
* (AC-19) while still reusing these conventions.
|
|
20
|
+
*
|
|
21
|
+
* Requirements: AC-19, AC-33, AC-34, AC-41
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
/** Maximum length for a platform skill directory or file name. */
|
|
26
|
+
export const MAX_SKILL_NAME_LENGTH = 64;
|
|
27
|
+
/**
|
|
28
|
+
* The one skill that never takes the `aidlc-` prefix: the bare entry point.
|
|
29
|
+
* Both prefixing adapters exempt it, so the shared helper must too.
|
|
30
|
+
*/
|
|
31
|
+
const BARE_ENTRY_POINT = 'aidlc';
|
|
32
|
+
/** The namespace prefix reserved for framework-owned skills. */
|
|
33
|
+
export const FRAMEWORK_PREFIX = 'aidlc-';
|
|
34
|
+
/**
|
|
35
|
+
* Normalize a skill name into a filesystem-safe path segment.
|
|
36
|
+
*
|
|
37
|
+
* This is the claude-code / kiro directory convention: lowercase, non-charset
|
|
38
|
+
* characters substituted with hyphens, hyphen runs collapsed, ends trimmed,
|
|
39
|
+
* optionally prefixed, then truncated.
|
|
40
|
+
*
|
|
41
|
+
* @param name - Raw skill name.
|
|
42
|
+
* @param opts - Prefix choice plus optional collapse/truncate overrides.
|
|
43
|
+
* @returns A lowercase hyphenated segment safe to use as a directory name.
|
|
44
|
+
*/
|
|
45
|
+
export function normalizeSkillName(name, opts) {
|
|
46
|
+
const collapse = opts.collapse ?? true;
|
|
47
|
+
const truncate = opts.truncate ?? MAX_SKILL_NAME_LENGTH;
|
|
48
|
+
let normalized = name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
49
|
+
if (collapse) {
|
|
50
|
+
normalized = normalized.replace(/-+/g, '-').replace(/^-|-$/g, '');
|
|
51
|
+
}
|
|
52
|
+
if (opts.prefix && normalized !== BARE_ENTRY_POINT && !normalized.startsWith(FRAMEWORK_PREFIX)) {
|
|
53
|
+
normalized = `${FRAMEWORK_PREFIX}${normalized}`;
|
|
54
|
+
}
|
|
55
|
+
if (truncate > 0 && normalized.length > truncate) {
|
|
56
|
+
normalized = normalized.slice(0, truncate);
|
|
57
|
+
}
|
|
58
|
+
return normalized;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Windsurf's weaker slug: lowercase and substitute, but neither collapse nor
|
|
62
|
+
* truncate nor prefix.
|
|
63
|
+
*
|
|
64
|
+
* Deliberately not unified with `normalizeSkillName`. The two agree on every
|
|
65
|
+
* name shipped today (all are already lowercase-hyphenated), but they diverge on
|
|
66
|
+
* non-conforming input, and changing windsurf's output would violate AC-33.
|
|
67
|
+
* `test/golden-adapters-refactor.test.ts` pins the difference.
|
|
68
|
+
*
|
|
69
|
+
* @param name - Raw skill name.
|
|
70
|
+
* @returns A lowercase slug with non-charset characters substituted.
|
|
71
|
+
*/
|
|
72
|
+
export function skillSlug(name) {
|
|
73
|
+
return name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The canonical `.aidlc/skills/` filename convention: the skill name verbatim
|
|
77
|
+
* plus `.md`.
|
|
78
|
+
*
|
|
79
|
+
* Used by claude-code, kiro, cursor, and codex. Windsurf routes its canonical
|
|
80
|
+
* filename through `skillSlug` instead — a pre-existing inconsistency preserved
|
|
81
|
+
* here rather than fixed, per AC-33.
|
|
82
|
+
*
|
|
83
|
+
* @param name - Raw skill name.
|
|
84
|
+
* @returns `<name>.md`.
|
|
85
|
+
*/
|
|
86
|
+
export function canonicalSkillFilename(name) {
|
|
87
|
+
return `${name}.md`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Build a platform rule/file name carrying the framework prefix.
|
|
91
|
+
*
|
|
92
|
+
* Several adapters built this prefix inline in a template literal
|
|
93
|
+
* (`.cursor/rules/aidlc-${name}.mdc`), which meant re-pointing the helpers alone
|
|
94
|
+
* would have left the convention restated per platform — the drift AC-34 exists
|
|
95
|
+
* to prevent. Note this reproduces the existing double-prefix for framework
|
|
96
|
+
* skills (`aidlc-aidlc-overview`), which AC-33 requires us to preserve.
|
|
97
|
+
*
|
|
98
|
+
* @param name - Raw skill name (or slug).
|
|
99
|
+
* @param ext - File extension including the dot, e.g. `.mdc`.
|
|
100
|
+
* @returns `aidlc-<name><ext>`.
|
|
101
|
+
*/
|
|
102
|
+
export function prefixedRuleFilename(name, ext) {
|
|
103
|
+
return `${FRAMEWORK_PREFIX}${name}${ext}`;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/compile/naming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;GAGG;AACH,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAezC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAAmB;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC;IAExD,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAEhE,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,KAAK,gBAAgB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/F,UAAU,GAAG,GAAG,gBAAgB,GAAG,UAAU,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QACjD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,GAAG,IAAI,KAAK,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,GAAW;IAC5D,OAAO,GAAG,gBAAgB,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -16,5 +16,7 @@
|
|
|
16
16
|
import type { CostProvider, ProviderEnv } from './provider.js';
|
|
17
17
|
/** Root directory that transcripts must live under (FR3.9). */
|
|
18
18
|
export declare function transcriptRoot(env: ProviderEnv): string;
|
|
19
|
+
/** Is `p` the directory `root` or something beneath it? Purely lexical. */
|
|
20
|
+
export declare function isWithin(root: string, p: string): boolean;
|
|
19
21
|
export declare const claudeCodeProvider: CostProvider;
|
|
20
22
|
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/cost/providers/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAIvD;AAMD,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/cost/providers/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAIvD;AAMD,2EAA2E;AAC3E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,eAAO,MAAM,kBAAkB,EAAE,YAqGhC,CAAC"}
|
|
@@ -27,6 +27,10 @@ export function transcriptRoot(env) {
|
|
|
27
27
|
function isCount(v) {
|
|
28
28
|
return typeof v === 'number' && Number.isFinite(v) && v >= 0;
|
|
29
29
|
}
|
|
30
|
+
/** Is `p` the directory `root` or something beneath it? Purely lexical. */
|
|
31
|
+
export function isWithin(root, p) {
|
|
32
|
+
return p === root || p.startsWith(root + sep);
|
|
33
|
+
}
|
|
30
34
|
export const claudeCodeProvider = {
|
|
31
35
|
name: 'claude-code',
|
|
32
36
|
detect(env) {
|
|
@@ -34,28 +38,46 @@ export const claudeCodeProvider = {
|
|
|
34
38
|
},
|
|
35
39
|
resolveSource(input, env) {
|
|
36
40
|
if (!SESSION_ID_RE.test(input.session_id))
|
|
37
|
-
return
|
|
41
|
+
return { ok: false, reason: 'invalid-input' };
|
|
38
42
|
if (!input.transcript_path)
|
|
39
|
-
return
|
|
40
|
-
|
|
43
|
+
return { ok: false, reason: 'invalid-input' };
|
|
44
|
+
const requested = resolve(input.transcript_path);
|
|
45
|
+
if (!requested.endsWith('.jsonl'))
|
|
46
|
+
return { ok: false, reason: 'invalid-input' };
|
|
47
|
+
// Lexical containment first, against both the raw and the resolved root
|
|
48
|
+
// (the home dir may itself be a symlink). Deciding this before any disk
|
|
49
|
+
// access is what keeps `source-missing` from reporting on paths outside the
|
|
50
|
+
// root: out of bounds is `invalid-input` whether or not it exists, so the
|
|
51
|
+
// benign code is never an existence oracle (FR3.9, NFR-3).
|
|
52
|
+
const rawRoot = transcriptRoot(env);
|
|
53
|
+
let realRoot = null;
|
|
41
54
|
try {
|
|
42
|
-
|
|
55
|
+
realRoot = realpathSync(rawRoot);
|
|
43
56
|
}
|
|
44
57
|
catch {
|
|
45
|
-
|
|
58
|
+
realRoot = null;
|
|
46
59
|
}
|
|
47
|
-
|
|
60
|
+
const inBounds = isWithin(rawRoot, requested) || (realRoot !== null && isWithin(realRoot, requested));
|
|
61
|
+
if (!inBounds)
|
|
62
|
+
return { ok: false, reason: 'invalid-input' };
|
|
63
|
+
// In bounds, but the platform root isn't on disk: nothing to capture here.
|
|
64
|
+
if (realRoot === null)
|
|
65
|
+
return { ok: false, reason: 'source-missing' };
|
|
66
|
+
let real;
|
|
48
67
|
try {
|
|
49
|
-
|
|
68
|
+
real = realpathSync(requested);
|
|
50
69
|
}
|
|
51
70
|
catch {
|
|
52
|
-
|
|
71
|
+
// In bounds and well-formed, but not on disk: the session produced no
|
|
72
|
+
// transcript. Ordinary session churn, not a failure (AC-3).
|
|
73
|
+
return { ok: false, reason: 'source-missing' };
|
|
53
74
|
}
|
|
54
|
-
|
|
55
|
-
|
|
75
|
+
// Re-check after resolution: a symlink inside the root may point out of it.
|
|
76
|
+
if (!isWithin(realRoot, real))
|
|
77
|
+
return { ok: false, reason: 'invalid-input' };
|
|
56
78
|
if (!real.endsWith('.jsonl'))
|
|
57
|
-
return
|
|
58
|
-
return { provider: 'claude-code', path: real };
|
|
79
|
+
return { ok: false, reason: 'invalid-input' };
|
|
80
|
+
return { ok: true, source: { provider: 'claude-code', path: real } };
|
|
59
81
|
},
|
|
60
82
|
async extract(source, since) {
|
|
61
83
|
const segments = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cost/providers/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzD,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvG,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,CAAU;IACzB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,aAAa;IAEnB,MAAM,CAAC,GAAgB;QACrB,OAAO,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,aAAa,CAAC,KAAkB,EAAE,GAAgB;QAChD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/cost/providers/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGzD,+DAA+D;AAC/D,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACvG,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,CAAU;IACzB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,CAAS;IAC9C,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,IAAI,EAAE,aAAa;IAEnB,MAAM,CAAC,GAAgB;QACrB,OAAO,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,aAAa,CAAC,KAAkB,EAAE,GAAgB;QAChD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QACzF,IAAI,CAAC,KAAK,CAAC,eAAe;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAE1E,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAEjF,wEAAwE;QACxE,wEAAwE;QACxE,4EAA4E;QAC5E,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAC7D,2EAA2E;QAC3E,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QAEtE,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,sEAAsE;YACtE,4DAA4D;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;QACjD,CAAC;QACD,4EAA4E;QAC5E,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAC7E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QAC5E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAiB,EAAE,KAAoB;QACnD,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,eAAe,CAAC;YACzB,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC1D,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,wEAAwE;QACxE,wEAAwE;QACxE,iEAAiE;QACjE,IAAI,QAAQ,GAAG,KAAK,KAAK,IAAI,CAAC;QAC9B,MAAM,GAAG,GAAmB,EAAE,CAAC;QAE/B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE;gBAAE,SAAS;YACvB,IAAI,KAA8B,CAAC;YACnC,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAA4B,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAEhE,MAAM,OAAO,GAAG,KAAK,CAAC,OAA8C,CAAC;YACrE,MAAM,KAAK,GAAG,OAAO,EAAE,KAA4C,CAAC;YACpE,MAAM,KAAK,GAAG,OAAO,OAAO,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC1F,CAAC,CAAC,KAAK,CAAC,SAAS;gBACjB,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,KAAK,IAAI,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBAC5D,MAAM,KAAK,GAAe;oBACxB,IAAI,EAAE,QAAQ;oBACd,KAAK;oBACL,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAClE,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBACrE,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;oBAC7F,kBAAkB,EAAE,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;iBACvG,CAAC;gBACF,MAAM,GAAG,GAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACtD,IAAI,QAAQ;oBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;oBACvB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC/B,uEAAuE;gBACvE,QAAQ,GAAG,KAAK,CAAC;gBACjB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,IAAI,QAAQ;YAAE,OAAO,GAAG,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../src/cost/providers/kiro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"kiro.d.ts","sourceRoot":"","sources":["../../../src/cost/providers/kiro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG/D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAEzD;AA4ED,eAAO,MAAM,YAAY,EAAE,YA+D1B,CAAC"}
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { readFileSync, existsSync, realpathSync } from 'node:fs';
|
|
17
17
|
import { homedir } from 'node:os';
|
|
18
|
-
import { join, resolve
|
|
18
|
+
import { join, resolve } from 'node:path';
|
|
19
19
|
import { SESSION_ID_RE } from '../types.js';
|
|
20
|
+
import { isWithin } from './claude-code.js';
|
|
20
21
|
export function kiroSessionsRoot(env) {
|
|
21
22
|
return join(env.home ?? homedir(), '.kiro', 'sessions');
|
|
22
23
|
}
|
|
@@ -100,19 +101,30 @@ export const kiroProvider = {
|
|
|
100
101
|
},
|
|
101
102
|
resolveSource(input, env) {
|
|
102
103
|
if (!SESSION_ID_RE.test(input.session_id))
|
|
103
|
-
return
|
|
104
|
+
return { ok: false, reason: 'invalid-input' };
|
|
104
105
|
const root = kiroSessionsRoot(env);
|
|
105
|
-
let realRoot;
|
|
106
|
+
let realRoot = null;
|
|
106
107
|
try {
|
|
107
108
|
realRoot = realpathSync(root);
|
|
108
109
|
}
|
|
109
110
|
catch {
|
|
110
|
-
|
|
111
|
+
realRoot = null;
|
|
111
112
|
}
|
|
113
|
+
// Containment before anything else, for the same reason as claude-code: an
|
|
114
|
+
// out-of-bounds path must read as a rejection even when kiro isn't present.
|
|
115
|
+
if (input.transcript_path !== undefined) {
|
|
116
|
+
const requested = resolve(input.transcript_path);
|
|
117
|
+
const inBounds = isWithin(root, requested) || (realRoot !== null && isWithin(realRoot, requested));
|
|
118
|
+
if (!inBounds)
|
|
119
|
+
return { ok: false, reason: 'invalid-input' };
|
|
120
|
+
}
|
|
121
|
+
// Kiro isn't installed here — benign, nothing to capture.
|
|
122
|
+
if (realRoot === null)
|
|
123
|
+
return { ok: false, reason: 'source-missing' };
|
|
112
124
|
// CLI shape first: sessions/cli/<id>.json
|
|
113
125
|
const cliPath = join(realRoot, 'cli', `${input.session_id}.json`);
|
|
114
126
|
if (existsSync(cliPath)) {
|
|
115
|
-
return { provider: 'kiro', path: realpathSync(cliPath) };
|
|
127
|
+
return { ok: true, source: { provider: 'kiro', path: realpathSync(cliPath) } };
|
|
116
128
|
}
|
|
117
129
|
// IDE shape: locate sess_<id> under a workspace-hash directory whose
|
|
118
130
|
// session.json workspacePaths includes the project root.
|
|
@@ -122,13 +134,14 @@ export const kiroProvider = {
|
|
|
122
134
|
real = realpathSync(resolve(input.transcript_path));
|
|
123
135
|
}
|
|
124
136
|
catch {
|
|
125
|
-
return
|
|
137
|
+
return { ok: false, reason: 'source-missing' };
|
|
126
138
|
}
|
|
127
|
-
if (
|
|
128
|
-
return
|
|
129
|
-
return { provider: 'kiro', path: real };
|
|
139
|
+
if (!isWithin(realRoot, real))
|
|
140
|
+
return { ok: false, reason: 'invalid-input' };
|
|
141
|
+
return { ok: true, source: { provider: 'kiro', path: real } };
|
|
130
142
|
}
|
|
131
|
-
|
|
143
|
+
// No CLI file and no IDE path: this session left no records behind.
|
|
144
|
+
return { ok: false, reason: 'source-missing' };
|
|
132
145
|
},
|
|
133
146
|
async extract(source, since) {
|
|
134
147
|
const events = source.path.endsWith('.json')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/cost/providers/kiro.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"kiro.js","sourceRoot":"","sources":["../../../src/cost/providers/kiro.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Design: design.md §3
|
|
10
10
|
*/
|
|
11
|
-
import type { RecordInput, SourceRef, UsageSegment } from '../types.js';
|
|
11
|
+
import type { RecordInput, ResolveResult, SourceRef, UsageSegment } from '../types.js';
|
|
12
12
|
export interface ProviderEnv {
|
|
13
13
|
projectRoot: string;
|
|
14
14
|
/** Home directory override for tests. */
|
|
@@ -20,10 +20,15 @@ export interface CostProvider {
|
|
|
20
20
|
detect(env: ProviderEnv): boolean;
|
|
21
21
|
/**
|
|
22
22
|
* Validate hook input and resolve the usage-record source (FR3.9).
|
|
23
|
-
*
|
|
24
|
-
*
|
|
23
|
+
*
|
|
24
|
+
* Returns `{ok: false, reason}` rather than a bare null so the recorder can
|
|
25
|
+
* tell a benign miss (`source-missing`: the session simply wrote no records)
|
|
26
|
+
* from a rejection (`invalid-input`: malformed, or outside the platform's
|
|
27
|
+
* known root). Containment is checked lexically before touching the disk, so
|
|
28
|
+
* a non-existent path outside the root reports `invalid-input` and never
|
|
29
|
+
* leaks whether it exists.
|
|
25
30
|
*/
|
|
26
|
-
resolveSource(input: RecordInput, env: ProviderEnv):
|
|
31
|
+
resolveSource(input: RecordInput, env: ProviderEnv): ResolveResult;
|
|
27
32
|
/**
|
|
28
33
|
* Extract usage segments after `since` (a cursor previously returned in
|
|
29
34
|
* a segment). Streaming and fail-soft: malformed records are skipped.
|