@ethlete/agent-rules 0.1.0-next.1 → 0.1.0-next.10

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.
Files changed (121) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +296 -21
  3. package/content/git-hooks/post-checkout.sh +10 -0
  4. package/content/git-hooks/pre-push.sh +5 -0
  5. package/content/hooks/context-warning.py +284 -69
  6. package/content/output-styles/ste-clarity.md +131 -0
  7. package/content/rules/comments.md +50 -20
  8. package/content/skills/angular-patterns/SKILL.md +1 -1
  9. package/content/skills/api-source/SKILL.md +118 -0
  10. package/content/skills/figma-export/SKILL.md +193 -0
  11. package/content/skills/figma-export/dump-figma-layers.py +83 -0
  12. package/content/skills/figma-export/dump-figma-svg.py +235 -0
  13. package/content/skills/figma-export/measure-template.mjs +87 -0
  14. package/content/skills/git-commit/SKILL.md +6 -7
  15. package/content/skills/git-flow/SKILL.md +87 -0
  16. package/content/skills/handoff/SKILL.md +4 -0
  17. package/content/skills/query/SKILL.md +23 -13
  18. package/content/skills/rxjs-signals/SKILL.md +1 -1
  19. package/content/skills/sdk-docs/SKILL.md +10 -2
  20. package/content/skills/sdk-local-build/SKILL.md +115 -0
  21. package/content/skills/sdk-source/SKILL.md +133 -0
  22. package/content/skills/styleguide/STYLEGUIDE.md +2 -2
  23. package/content/skills/theming/SKILL.md +1 -1
  24. package/content/skills/timetrack/SKILL.md +66 -0
  25. package/package.json +12 -1
  26. package/src/index.js +23 -10
  27. package/src/index.js.map +1 -1
  28. package/src/lib/commitlint.d.ts +10 -0
  29. package/src/lib/commitlint.js +51 -0
  30. package/src/lib/commitlint.js.map +1 -0
  31. package/src/lib/config.d.ts +35 -6
  32. package/src/lib/config.js +26 -3
  33. package/src/lib/config.js.map +1 -1
  34. package/src/lib/git-flow/build.d.ts +35 -0
  35. package/src/lib/git-flow/build.js +24 -0
  36. package/src/lib/git-flow/build.js.map +1 -0
  37. package/src/lib/git-flow/config.d.ts +59 -0
  38. package/src/lib/git-flow/config.js +50 -0
  39. package/src/lib/git-flow/config.js.map +1 -0
  40. package/src/lib/git-flow/index.d.ts +6 -0
  41. package/src/lib/git-flow/index.js +10 -0
  42. package/src/lib/git-flow/index.js.map +1 -0
  43. package/src/lib/git-flow/parse.d.ts +49 -0
  44. package/src/lib/git-flow/parse.js +274 -0
  45. package/src/lib/git-flow/parse.js.map +1 -0
  46. package/src/lib/git-flow/rename.d.ts +24 -0
  47. package/src/lib/git-flow/rename.js +70 -0
  48. package/src/lib/git-flow/rename.js.map +1 -0
  49. package/src/lib/git-flow/start.d.ts +49 -0
  50. package/src/lib/git-flow/start.js +57 -0
  51. package/src/lib/git-flow/start.js.map +1 -0
  52. package/src/lib/git-flow/validate.d.ts +34 -0
  53. package/src/lib/git-flow/validate.js +72 -0
  54. package/src/lib/git-flow/validate.js.map +1 -0
  55. package/src/lib/git-flow-command.d.ts +4 -0
  56. package/src/lib/git-flow-command.js +157 -0
  57. package/src/lib/git-flow-command.js.map +1 -0
  58. package/src/lib/git-flow-repair.d.ts +17 -0
  59. package/src/lib/git-flow-repair.js +146 -0
  60. package/src/lib/git-flow-repair.js.map +1 -0
  61. package/src/lib/git-flow-start.d.ts +20 -0
  62. package/src/lib/git-flow-start.js +132 -0
  63. package/src/lib/git-flow-start.js.map +1 -0
  64. package/src/lib/git.d.ts +27 -0
  65. package/src/lib/git.js +49 -0
  66. package/src/lib/git.js.map +1 -0
  67. package/src/lib/gitlab.d.ts +35 -0
  68. package/src/lib/gitlab.js +98 -0
  69. package/src/lib/gitlab.js.map +1 -0
  70. package/src/lib/index.d.ts +1 -0
  71. package/src/lib/index.js +1 -0
  72. package/src/lib/index.js.map +1 -1
  73. package/src/lib/output-style-command.d.ts +3 -0
  74. package/src/lib/output-style-command.js +69 -0
  75. package/src/lib/output-style-command.js.map +1 -0
  76. package/src/lib/output-style.d.ts +38 -0
  77. package/src/lib/output-style.js +126 -0
  78. package/src/lib/output-style.js.map +1 -0
  79. package/src/lib/owned-paths.js +19 -1
  80. package/src/lib/owned-paths.js.map +1 -1
  81. package/src/lib/plan.d.ts +0 -1
  82. package/src/lib/plan.js +83 -9
  83. package/src/lib/plan.js.map +1 -1
  84. package/src/lib/prompt.d.ts +8 -0
  85. package/src/lib/prompt.js +27 -0
  86. package/src/lib/prompt.js.map +1 -0
  87. package/src/lib/render.d.ts +20 -2
  88. package/src/lib/render.js +31 -8
  89. package/src/lib/render.js.map +1 -1
  90. package/src/lib/sync.d.ts +0 -1
  91. package/src/lib/sync.js +2 -2
  92. package/src/lib/sync.js.map +1 -1
  93. package/src/lib/targets/claude-hooks.d.ts +1 -23
  94. package/src/lib/targets/claude-hooks.js +15 -84
  95. package/src/lib/targets/claude-hooks.js.map +1 -1
  96. package/src/lib/targets/claude.js +1 -1
  97. package/src/lib/targets/claude.js.map +1 -1
  98. package/src/lib/targets/codex-hooks.d.ts +12 -0
  99. package/src/lib/targets/codex-hooks.js +33 -0
  100. package/src/lib/targets/codex-hooks.js.map +1 -0
  101. package/src/lib/targets/codex.js +1 -1
  102. package/src/lib/targets/codex.js.map +1 -1
  103. package/src/lib/targets/copilot.js +1 -1
  104. package/src/lib/targets/copilot.js.map +1 -1
  105. package/src/lib/targets/cursor.js +1 -1
  106. package/src/lib/targets/cursor.js.map +1 -1
  107. package/src/lib/targets/git-hooks.d.ts +24 -0
  108. package/src/lib/targets/git-hooks.js +70 -0
  109. package/src/lib/targets/git-hooks.js.map +1 -0
  110. package/src/lib/targets/hooks-shared.d.ts +37 -0
  111. package/src/lib/targets/hooks-shared.js +95 -0
  112. package/src/lib/targets/hooks-shared.js.map +1 -0
  113. package/src/lib/targets/shared.d.ts +0 -1
  114. package/src/lib/targets/shared.js +1 -1
  115. package/src/lib/targets/shared.js.map +1 -1
  116. package/src/lib/timetrack-command.d.ts +11 -0
  117. package/src/lib/timetrack-command.js +199 -0
  118. package/src/lib/timetrack-command.js.map +1 -0
  119. package/src/lib/timetrack.d.ts +86 -0
  120. package/src/lib/timetrack.js +112 -0
  121. package/src/lib/timetrack.js.map +1 -0
@@ -0,0 +1,86 @@
1
+ export type TimetrackIssue = {
2
+ key: string;
3
+ id: string;
4
+ summary: string;
5
+ issueType: string;
6
+ parentKey?: string;
7
+ subject?: string;
8
+ };
9
+ export type TimetrackStatus = {
10
+ version: number;
11
+ jiraReady: boolean;
12
+ projects: {
13
+ key: string;
14
+ name: string;
15
+ }[];
16
+ subjectField: string;
17
+ };
18
+ export type TimetrackInstance = {
19
+ levels: {
20
+ hierarchyLevel: number;
21
+ typeNames: string[];
22
+ }[];
23
+ suggestedParenting: 'parent-field' | 'issue-link';
24
+ subjectFieldCandidates: {
25
+ id: string;
26
+ name: string;
27
+ }[];
28
+ };
29
+ export type TimetrackRepoProject = {
30
+ repoPath: string;
31
+ projectKey?: string;
32
+ private: boolean;
33
+ inherited: boolean;
34
+ suggestedProjectKey?: string;
35
+ };
36
+ export type TimetrackWorklog = {
37
+ day: string;
38
+ issueKey: string;
39
+ description: string;
40
+ fromMs: number;
41
+ toMs: number;
42
+ durationMs: number;
43
+ };
44
+ /**
45
+ * Where the app writes the port and the token, which is its data directory on each platform.
46
+ *
47
+ * `TIMETRACK_AGENT_DISCOVERY` names the file directly, for a machine whose app data lives somewhere
48
+ * else and for a test.
49
+ */
50
+ export declare const timetrackDiscoveryPath: () => string;
51
+ /**
52
+ * Asks the running Timetrack app to carry out one operation.
53
+ *
54
+ * It is the only way this package reaches Jira. The token lives in the app's keychain entry and in no
55
+ * repository, so a checkout an agent works in holds nothing worth stealing and nothing to rotate.
56
+ */
57
+ export declare const askTimetrack: <T>(request: Record<string, unknown> & {
58
+ op: string;
59
+ }) => Promise<T>;
60
+ export declare const timetrackStatus: () => Promise<TimetrackStatus>;
61
+ export declare const timetrackInstance: () => Promise<TimetrackInstance>;
62
+ export declare const timetrackIssue: (key: string) => Promise<TimetrackIssue>;
63
+ export declare const timetrackSearch: (options: {
64
+ text?: string;
65
+ projectKey?: string;
66
+ assignedToMe?: boolean;
67
+ limit?: number;
68
+ }) => Promise<TimetrackIssue[]>;
69
+ export declare const timetrackRepoProject: (repoPath: string) => Promise<TimetrackRepoProject>;
70
+ export declare const timetrackCreateIssue: (options: {
71
+ summary: string;
72
+ description?: string;
73
+ projectKey?: string;
74
+ issueTypeName?: string;
75
+ parentKey?: string;
76
+ subject?: string;
77
+ }) => Promise<{
78
+ key: string;
79
+ id: string;
80
+ }>;
81
+ export declare const timetrackAddWorklog: (options: {
82
+ issueKey: string;
83
+ description?: string;
84
+ fromMs: number;
85
+ durationMs: number;
86
+ }) => Promise<TimetrackWorklog>;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.timetrackAddWorklog = exports.timetrackCreateIssue = exports.timetrackRepoProject = exports.timetrackSearch = exports.timetrackIssue = exports.timetrackInstance = exports.timetrackStatus = exports.askTimetrack = exports.timetrackDiscoveryPath = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const fs_1 = require("fs");
6
+ const os_1 = require("os");
7
+ const path_1 = require("path");
8
+ /** The Timetrack app's bundle identifier, which is also the name of its data directory. */
9
+ const IDENTIFIER = 'io.ethlete.timetrack';
10
+ const DISCOVERY_FILENAME = 'agent.json';
11
+ /**
12
+ * The contract version this client speaks. The app writes its own into the discovery file, and a
13
+ * mismatch stops here rather than at a field that is missing for a reason nobody can see.
14
+ */
15
+ const PROTOCOL_VERSION = 1;
16
+ /** A Jira search behind a slow instance is the long case; the app's own deadline is 60 seconds. */
17
+ const TIMEOUT_MS = 70000;
18
+ const PATH = '/agent';
19
+ const NOT_RUNNING = [
20
+ 'Timetrack is not running, so no Jira credentials are reachable.',
21
+ 'Start the app — it holds the token for every repository on this machine — then try again.',
22
+ ].join('\n');
23
+ /**
24
+ * Where the app writes the port and the token, which is its data directory on each platform.
25
+ *
26
+ * `TIMETRACK_AGENT_DISCOVERY` names the file directly, for a machine whose app data lives somewhere
27
+ * else and for a test.
28
+ */
29
+ const timetrackDiscoveryPath = () => {
30
+ var _a, _b, _c;
31
+ const override = (_a = process.env['TIMETRACK_AGENT_DISCOVERY']) === null || _a === void 0 ? void 0 : _a.trim();
32
+ if (override)
33
+ return override;
34
+ const home = (0, os_1.homedir)();
35
+ if ((0, os_1.platform)() === 'darwin')
36
+ return (0, path_1.join)(home, 'Library', 'Application Support', IDENTIFIER, DISCOVERY_FILENAME);
37
+ if ((0, os_1.platform)() === 'win32') {
38
+ const appData = (_b = process.env['APPDATA']) === null || _b === void 0 ? void 0 : _b.trim();
39
+ return (0, path_1.join)(appData || (0, path_1.join)(home, 'AppData', 'Roaming'), IDENTIFIER, DISCOVERY_FILENAME);
40
+ }
41
+ const dataHome = (_c = process.env['XDG_DATA_HOME']) === null || _c === void 0 ? void 0 : _c.trim();
42
+ return (0, path_1.join)(dataHome || (0, path_1.join)(home, '.local', 'share'), IDENTIFIER, DISCOVERY_FILENAME);
43
+ };
44
+ exports.timetrackDiscoveryPath = timetrackDiscoveryPath;
45
+ const readDiscovery = () => {
46
+ const path = (0, exports.timetrackDiscoveryPath)();
47
+ if (!(0, fs_1.existsSync)(path))
48
+ throw new Error(NOT_RUNNING);
49
+ let parsed;
50
+ try {
51
+ parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
52
+ }
53
+ catch (_a) {
54
+ throw new Error(`${path} is not readable JSON. Restart Timetrack, which rewrites it at every start.`);
55
+ }
56
+ const discovery = parsed;
57
+ if (typeof discovery.port !== 'number' || typeof discovery.token !== 'string') {
58
+ throw new Error(`${path} names no port and token. Restart Timetrack, which rewrites it at every start.`);
59
+ }
60
+ if (discovery.version !== PROTOCOL_VERSION) {
61
+ throw new Error(`Timetrack speaks version ${discovery.version} of the agent contract and this CLI speaks ${PROTOCOL_VERSION}. Update whichever is older.`);
62
+ }
63
+ return { version: discovery.version, port: discovery.port, token: discovery.token };
64
+ };
65
+ /**
66
+ * Asks the running Timetrack app to carry out one operation.
67
+ *
68
+ * It is the only way this package reaches Jira. The token lives in the app's keychain entry and in no
69
+ * repository, so a checkout an agent works in holds nothing worth stealing and nothing to rotate.
70
+ */
71
+ const askTimetrack = (request) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
72
+ const discovery = readDiscovery();
73
+ let response;
74
+ try {
75
+ response = yield fetch(`http://127.0.0.1:${discovery.port}${PATH}`, {
76
+ method: 'POST',
77
+ headers: { authorization: `Bearer ${discovery.token}`, 'content-type': 'application/json' },
78
+ body: JSON.stringify(request),
79
+ signal: AbortSignal.timeout(TIMEOUT_MS),
80
+ });
81
+ }
82
+ catch (_a) {
83
+ // The file is there and the socket is not, which is what a discovery file left behind by an app
84
+ // that has since stopped looks like.
85
+ throw new Error(NOT_RUNNING);
86
+ }
87
+ if (response.status === 401) {
88
+ throw new Error('Timetrack refused the token. It writes a new one at every start — restart the app.');
89
+ }
90
+ if (!response.ok)
91
+ throw new Error(`Timetrack answered ${response.status} ${response.statusText}.`);
92
+ const answer = (yield response.json());
93
+ if (!answer.ok)
94
+ throw new Error(answer.message);
95
+ return answer.value;
96
+ });
97
+ exports.askTimetrack = askTimetrack;
98
+ const timetrackStatus = () => (0, exports.askTimetrack)({ op: 'status' });
99
+ exports.timetrackStatus = timetrackStatus;
100
+ const timetrackInstance = () => (0, exports.askTimetrack)({ op: 'jira.instance' });
101
+ exports.timetrackInstance = timetrackInstance;
102
+ const timetrackIssue = (key) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)({ op: 'jira.issue', key })).issue; });
103
+ exports.timetrackIssue = timetrackIssue;
104
+ const timetrackSearch = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)(Object.assign({ op: 'jira.search' }, options))).issues; });
105
+ exports.timetrackSearch = timetrackSearch;
106
+ const timetrackRepoProject = (repoPath) => (0, exports.askTimetrack)({ op: 'repo.project', repoPath });
107
+ exports.timetrackRepoProject = timetrackRepoProject;
108
+ const timetrackCreateIssue = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)(Object.assign({ op: 'jira.create' }, options))).issue; });
109
+ exports.timetrackCreateIssue = timetrackCreateIssue;
110
+ const timetrackAddWorklog = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)(Object.assign({ op: 'worklog.add' }, options))).worklog; });
111
+ exports.timetrackAddWorklog = timetrackAddWorklog;
112
+ //# sourceMappingURL=timetrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timetrack.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/timetrack.ts"],"names":[],"mappings":"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"}