@ethlete/agent-rules 0.1.0-next.3 → 0.1.0-next.30

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 (200) hide show
  1. package/AGENTS.md +28 -0
  2. package/CHANGELOG.md +463 -0
  3. package/CLAUDE.md +1 -0
  4. package/README.md +362 -29
  5. package/THIRD-PARTY-LICENSES.md +35 -0
  6. package/content/defaults.json +1 -1
  7. package/content/git-hooks/post-checkout.sh +10 -0
  8. package/content/git-hooks/pre-push.sh +5 -0
  9. package/content/hooks/context-warning.py +871 -110
  10. package/content/hooks/subagent-model-policy.py +194 -0
  11. package/content/mods/.claude-plugin/marketplace.json +11 -0
  12. package/content/mods/plugins/e2e-progress/.claude-plugin/plugin.json +6 -0
  13. package/content/mods/plugins/e2e-progress/hooks/hooks.json +1 -0
  14. package/content/mods/plugins/e2e-progress/hooks/register.tsx +442 -0
  15. package/content/mods/plugins/e2e-progress/tsconfig.json +3 -0
  16. package/content/mods/plugins/e2e-progress/types/index.d.ts +23 -0
  17. package/content/output-styles/ste-clarity.md +131 -0
  18. package/content/rules/agent-sessions-wake-up.md +11 -0
  19. package/content/rules/app-styling.md +66 -0
  20. package/content/rules/comments.md +4 -1
  21. package/content/rules/lint-and-format.md +7 -5
  22. package/content/rules/nx-layout.md +50 -0
  23. package/content/rules/reactive-state.md +1 -1
  24. package/content/rules/styling.md +9 -7
  25. package/content/rules/subagent-models.md +39 -0
  26. package/content/skills/agent-sessions/SKILL.md +81 -0
  27. package/content/skills/agent-sessions/agent-sessions.mjs +492 -0
  28. package/content/skills/angular-patterns/SKILL.md +30 -7
  29. package/content/skills/api-source/SKILL.md +156 -0
  30. package/content/skills/app-testing/SKILL.md +141 -0
  31. package/content/skills/codex-subagent/SKILL.md +90 -0
  32. package/content/skills/codex-subagent/codex-agent.mjs +229 -0
  33. package/content/skills/design-exploration/SKILL.md +657 -0
  34. package/content/skills/design-exploration/check-story.mjs +139 -0
  35. package/content/skills/design-exploration/shoot-template.mjs +61 -0
  36. package/content/skills/domain-modeling/ADR-FORMAT.md +47 -0
  37. package/content/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  38. package/content/skills/domain-modeling/SKILL.md +80 -0
  39. package/content/skills/e2e-triage/SKILL.md +80 -0
  40. package/content/skills/figma-export/SKILL.md +191 -0
  41. package/content/skills/figma-export/dump-figma-layers.py +83 -0
  42. package/content/skills/figma-export/dump-figma-svg.py +235 -0
  43. package/content/skills/figma-export/measure-template.mjs +87 -0
  44. package/content/skills/git-commit/SKILL.md +11 -7
  45. package/content/skills/git-flow/SKILL.md +87 -0
  46. package/content/skills/grill-with-docs/SKILL.md +13 -0
  47. package/content/skills/grilling/SKILL.md +51 -0
  48. package/content/skills/handoff/SKILL.md +125 -5
  49. package/content/skills/query/SKILL.md +165 -64
  50. package/content/skills/rxjs-signals/SKILL.md +33 -4
  51. package/content/skills/sdk-docs/SKILL.md +50 -14
  52. package/content/skills/sdk-local-build/SKILL.md +26 -8
  53. package/content/skills/sdk-local-build/sdk-local-baseline.mjs +64 -0
  54. package/content/skills/sdk-source/SKILL.md +37 -34
  55. package/content/skills/sdk-update/SKILL.md +103 -0
  56. package/content/skills/story-styling/SKILL.md +10 -8
  57. package/content/skills/styleguide/SKILL.md +12 -7
  58. package/content/skills/styleguide/assets.md +54 -0
  59. package/content/skills/styleguide/changesets.md +17 -0
  60. package/content/skills/styleguide/file-structure.md +73 -0
  61. package/content/skills/styleguide/lint-rule-lookup.md +51 -0
  62. package/content/skills/styleguide/storybook-structure.md +25 -0
  63. package/content/skills/theming/SKILL.md +50 -28
  64. package/content/skills/timetrack/SKILL.md +397 -0
  65. package/content/skills/verify-in-app/SKILL.md +107 -0
  66. package/migrations/app-styling-utilities.md +63 -0
  67. package/migrations/list-state-query-form.md +20 -0
  68. package/migrations/nx-layout.md +29 -0
  69. package/migrations/sdk-components-over-hand-built-ui.md +27 -0
  70. package/migrations/search-query-field.md +52 -0
  71. package/migrations.json +48 -0
  72. package/package.json +19 -3
  73. package/src/index.js +85 -30
  74. package/src/index.js.map +1 -1
  75. package/src/lib/cli-args.d.ts +9 -0
  76. package/src/lib/cli-args.js +48 -0
  77. package/src/lib/cli-args.js.map +1 -0
  78. package/src/lib/commitlint.d.ts +10 -0
  79. package/src/lib/commitlint.js +51 -0
  80. package/src/lib/commitlint.js.map +1 -0
  81. package/src/lib/config.d.ts +41 -5
  82. package/src/lib/config.js +117 -10
  83. package/src/lib/config.js.map +1 -1
  84. package/src/lib/filter.d.ts +2 -0
  85. package/src/lib/filter.js +4 -4
  86. package/src/lib/filter.js.map +1 -1
  87. package/src/lib/frontmatter.d.ts +2 -0
  88. package/src/lib/frontmatter.js +33 -5
  89. package/src/lib/frontmatter.js.map +1 -1
  90. package/src/lib/git-flow/build.d.ts +35 -0
  91. package/src/lib/git-flow/build.js +24 -0
  92. package/src/lib/git-flow/build.js.map +1 -0
  93. package/src/lib/git-flow/config.d.ts +59 -0
  94. package/src/lib/git-flow/config.js +50 -0
  95. package/src/lib/git-flow/config.js.map +1 -0
  96. package/src/lib/git-flow/index.d.ts +6 -0
  97. package/src/lib/git-flow/index.js +23 -0
  98. package/src/lib/git-flow/index.js.map +1 -0
  99. package/src/lib/git-flow/parse.d.ts +49 -0
  100. package/src/lib/git-flow/parse.js +300 -0
  101. package/src/lib/git-flow/parse.js.map +1 -0
  102. package/src/lib/git-flow/rename.d.ts +24 -0
  103. package/src/lib/git-flow/rename.js +70 -0
  104. package/src/lib/git-flow/rename.js.map +1 -0
  105. package/src/lib/git-flow/start.d.ts +49 -0
  106. package/src/lib/git-flow/start.js +57 -0
  107. package/src/lib/git-flow/start.js.map +1 -0
  108. package/src/lib/git-flow/validate.d.ts +34 -0
  109. package/src/lib/git-flow/validate.js +72 -0
  110. package/src/lib/git-flow/validate.js.map +1 -0
  111. package/src/lib/git-flow-command.d.ts +4 -0
  112. package/src/lib/git-flow-command.js +165 -0
  113. package/src/lib/git-flow-command.js.map +1 -0
  114. package/src/lib/git-flow-repair.d.ts +17 -0
  115. package/src/lib/git-flow-repair.js +165 -0
  116. package/src/lib/git-flow-repair.js.map +1 -0
  117. package/src/lib/git-flow-start.d.ts +20 -0
  118. package/src/lib/git-flow-start.js +140 -0
  119. package/src/lib/git-flow-start.js.map +1 -0
  120. package/src/lib/git.d.ts +64 -0
  121. package/src/lib/git.js +131 -0
  122. package/src/lib/git.js.map +1 -0
  123. package/src/lib/gitlab.d.ts +35 -0
  124. package/src/lib/gitlab.js +116 -0
  125. package/src/lib/gitlab.js.map +1 -0
  126. package/src/lib/index.d.ts +2 -0
  127. package/src/lib/index.js +26 -11
  128. package/src/lib/index.js.map +1 -1
  129. package/src/lib/migrate.js +6 -1
  130. package/src/lib/migrate.js.map +1 -1
  131. package/src/lib/output-style-command.d.ts +3 -0
  132. package/src/lib/output-style-command.js +69 -0
  133. package/src/lib/output-style-command.js.map +1 -0
  134. package/src/lib/output-style.d.ts +38 -0
  135. package/src/lib/output-style.js +134 -0
  136. package/src/lib/output-style.js.map +1 -0
  137. package/src/lib/owned-paths.js +27 -3
  138. package/src/lib/owned-paths.js.map +1 -1
  139. package/src/lib/package-runner.d.ts +4 -0
  140. package/src/lib/package-runner.js +86 -0
  141. package/src/lib/package-runner.js.map +1 -0
  142. package/src/lib/plain-text.d.ts +9 -0
  143. package/src/lib/plain-text.js +22 -0
  144. package/src/lib/plain-text.js.map +1 -0
  145. package/src/lib/plan.d.ts +6 -6
  146. package/src/lib/plan.js +164 -40
  147. package/src/lib/plan.js.map +1 -1
  148. package/src/lib/prompt.d.ts +8 -0
  149. package/src/lib/prompt.js +35 -0
  150. package/src/lib/prompt.js.map +1 -0
  151. package/src/lib/render.d.ts +25 -2
  152. package/src/lib/render.js +43 -10
  153. package/src/lib/render.js.map +1 -1
  154. package/src/lib/sessions-command.d.ts +4 -0
  155. package/src/lib/sessions-command.js +16 -0
  156. package/src/lib/sessions-command.js.map +1 -0
  157. package/src/lib/sync.d.ts +0 -1
  158. package/src/lib/sync.js +30 -17
  159. package/src/lib/sync.js.map +1 -1
  160. package/src/lib/targets/agents-skills.js +1 -1
  161. package/src/lib/targets/agents-skills.js.map +1 -1
  162. package/src/lib/targets/claude-hooks.d.ts +3 -23
  163. package/src/lib/targets/claude-hooks.js +22 -86
  164. package/src/lib/targets/claude-hooks.js.map +1 -1
  165. package/src/lib/targets/claude-mods.d.ts +20 -0
  166. package/src/lib/targets/claude-mods.js +47 -0
  167. package/src/lib/targets/claude-mods.js.map +1 -0
  168. package/src/lib/targets/claude.js +2 -3
  169. package/src/lib/targets/claude.js.map +1 -1
  170. package/src/lib/targets/codex-hooks.d.ts +12 -0
  171. package/src/lib/targets/codex-hooks.js +35 -0
  172. package/src/lib/targets/codex-hooks.js.map +1 -0
  173. package/src/lib/targets/codex.js +4 -4
  174. package/src/lib/targets/codex.js.map +1 -1
  175. package/src/lib/targets/copilot.js +4 -4
  176. package/src/lib/targets/copilot.js.map +1 -1
  177. package/src/lib/targets/cursor.js +3 -3
  178. package/src/lib/targets/cursor.js.map +1 -1
  179. package/src/lib/targets/git-hooks.d.ts +25 -0
  180. package/src/lib/targets/git-hooks.js +71 -0
  181. package/src/lib/targets/git-hooks.js.map +1 -0
  182. package/src/lib/targets/hooks-shared.d.ts +60 -0
  183. package/src/lib/targets/hooks-shared.js +130 -0
  184. package/src/lib/targets/hooks-shared.js.map +1 -0
  185. package/src/lib/targets/mcp.d.ts +16 -0
  186. package/src/lib/targets/mcp.js +68 -0
  187. package/src/lib/targets/mcp.js.map +1 -0
  188. package/src/lib/targets/shared.d.ts +1 -9
  189. package/src/lib/targets/shared.js +4 -8
  190. package/src/lib/targets/shared.js.map +1 -1
  191. package/src/lib/timetrack-command.d.ts +11 -0
  192. package/src/lib/timetrack-command.js +1063 -0
  193. package/src/lib/timetrack-command.js.map +1 -0
  194. package/src/lib/timetrack-snapshot.d.ts +55 -0
  195. package/src/lib/timetrack-snapshot.js +120 -0
  196. package/src/lib/timetrack-snapshot.js.map +1 -0
  197. package/src/lib/timetrack.d.ts +561 -0
  198. package/src/lib/timetrack.js +279 -0
  199. package/src/lib/timetrack.js.map +1 -0
  200. package/content/skills/styleguide/STYLEGUIDE.md +0 -520
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.timetrackAskAutoMode = exports.timetrackRejectApproval = exports.timetrackApprovals = exports.timetrackApprovalStatus = exports.timetrackApplyStandInSplit = exports.timetrackSplitStandIn = exports.timetrackResolveStandIn = exports.timetrackMergeStandIn = exports.timetrackRenameStandIn = exports.timetrackRemoveStandIn = exports.timetrackStandIns = exports.timetrackResyncAgentSessions = exports.timetrackRules = exports.timetrackCalendarEvents = exports.timetrackTempoDelete = exports.timetrackTempoSyncWrite = exports.timetrackTempoSync = exports.timetrackTempoWorklogs = exports.timetrackEditDay = exports.timetrackDayRows = exports.timetrackTranscriptDay = exports.timetrackDayEvents = exports.timetrackAddWorklog = exports.timetrackCreateIssue = exports.timetrackRepoProject = exports.timetrackSearch = exports.timetrackIssue = exports.timetrackInstance = exports.timetrackNaming = exports.timetrackStatus = exports.askTimetrack = exports.timetrackClientName = exports.timetrackDiscoveryPath = void 0;
13
+ const crypto_1 = require("crypto");
14
+ const fs_1 = require("fs");
15
+ const os_1 = require("os");
16
+ const path_1 = require("path");
17
+ /** The Timetrack app's bundle identifier, which is also the name of its data directory. */
18
+ const IDENTIFIER = 'io.ethlete.timetrack';
19
+ const DISCOVERY_FILENAME = 'agent.json';
20
+ /**
21
+ * The contract version this client speaks. The app writes its own into the discovery file, and a
22
+ * mismatch stops here rather than at a field that is missing for a reason nobody can see.
23
+ */
24
+ const PROTOCOL_VERSION = 3;
25
+ /** Covers the app's own deadlines: up to 60 seconds for the user to unlock it, then 60 to answer. */
26
+ const TIMEOUT_MS = 130000;
27
+ const PATH = '/agent';
28
+ const PROOF_PATH = '/agent/proof';
29
+ const NOT_RUNNING = [
30
+ 'Timetrack is not running, so no Jira credentials are reachable.',
31
+ 'Start the app — it holds the token for every repository on this machine — then try again.',
32
+ ].join('\n');
33
+ /**
34
+ * Where the app writes the port and the token, which is its data directory on each platform.
35
+ *
36
+ * `TIMETRACK_AGENT_DISCOVERY` names the file directly, for a machine whose app data lives somewhere
37
+ * else and for a test.
38
+ */
39
+ const timetrackDiscoveryPath = () => {
40
+ var _a, _b, _c;
41
+ const override = (_a = process.env['TIMETRACK_AGENT_DISCOVERY']) === null || _a === void 0 ? void 0 : _a.trim();
42
+ if (override)
43
+ return override;
44
+ const home = (0, os_1.homedir)();
45
+ if ((0, os_1.platform)() === 'darwin')
46
+ return (0, path_1.join)(home, 'Library', 'Application Support', IDENTIFIER, DISCOVERY_FILENAME);
47
+ if ((0, os_1.platform)() === 'win32') {
48
+ const appData = (_b = process.env['APPDATA']) === null || _b === void 0 ? void 0 : _b.trim();
49
+ return (0, path_1.join)(appData || (0, path_1.join)(home, 'AppData', 'Roaming'), IDENTIFIER, DISCOVERY_FILENAME);
50
+ }
51
+ const dataHome = (_c = process.env['XDG_DATA_HOME']) === null || _c === void 0 ? void 0 : _c.trim();
52
+ return (0, path_1.join)(dataHome || (0, path_1.join)(home, '.local', 'share'), IDENTIFIER, DISCOVERY_FILENAME);
53
+ };
54
+ exports.timetrackDiscoveryPath = timetrackDiscoveryPath;
55
+ const readDiscovery = () => {
56
+ const path = (0, exports.timetrackDiscoveryPath)();
57
+ if (!(0, fs_1.existsSync)(path))
58
+ throw new Error(NOT_RUNNING);
59
+ let parsed;
60
+ try {
61
+ parsed = JSON.parse((0, fs_1.readFileSync)(path, 'utf8'));
62
+ }
63
+ catch (_a) {
64
+ throw new Error(`${path} is not readable JSON. Restart Timetrack, which rewrites it at every start.`);
65
+ }
66
+ const discovery = parsed;
67
+ if (typeof discovery.port !== 'number' || typeof discovery.token !== 'string') {
68
+ throw new Error(`${path} names no port and token. Restart Timetrack, which rewrites it at every start.`);
69
+ }
70
+ if (discovery.version !== PROTOCOL_VERSION) {
71
+ throw new Error(`Timetrack speaks version ${discovery.version} of the agent contract and this CLI speaks ${PROTOCOL_VERSION}. Update whichever is older.`);
72
+ }
73
+ return { version: discovery.version, port: discovery.port, token: discovery.token };
74
+ };
75
+ /**
76
+ * The name the approval queue shows for this caller: `TIMETRACK_CLIENT` when set, Claude Code when it
77
+ * runs this, and nothing otherwise.
78
+ */
79
+ const timetrackClientName = () => { var _a; return ((_a = process.env['TIMETRACK_CLIENT']) === null || _a === void 0 ? void 0 : _a.trim()) || (process.env['CLAUDECODE'] ? 'Claude Code' : undefined); };
80
+ exports.timetrackClientName = timetrackClientName;
81
+ const IMPOSTOR = [
82
+ 'Something other than Timetrack answers on the port its discovery file names.',
83
+ 'The app writes a new port and a new token at every start — restart Timetrack, then try again.',
84
+ ].join('\n');
85
+ /**
86
+ * Makes the server prove it holds this run's token, before a request body or that token is sent.
87
+ *
88
+ * The port is ephemeral: once the app stops, anything running as this account can bind the port the
89
+ * discovery file still names, be handed the request and answer invented data. So the token is used as
90
+ * an HMAC key over a nonce this caller picks, and nothing is sent until the answer matches.
91
+ */
92
+ const proveTheServer = (discovery) => __awaiter(void 0, void 0, void 0, function* () {
93
+ var _a;
94
+ const nonce = (0, crypto_1.randomBytes)(16).toString('hex');
95
+ const expected = (0, crypto_1.createHmac)('sha256', discovery.token).update(nonce).digest('hex');
96
+ let answered;
97
+ try {
98
+ const response = yield fetch(`http://127.0.0.1:${discovery.port}${PROOF_PATH}?nonce=${nonce}`, {
99
+ redirect: 'error',
100
+ signal: AbortSignal.timeout(TIMEOUT_MS),
101
+ });
102
+ if (response.ok)
103
+ answered = (_a = (yield response.json()).value) === null || _a === void 0 ? void 0 : _a.proof;
104
+ }
105
+ catch (_b) {
106
+ throw new Error(NOT_RUNNING);
107
+ }
108
+ const offered = Buffer.from(answered !== null && answered !== void 0 ? answered : '', 'utf8');
109
+ if (offered.length !== expected.length || !(0, crypto_1.timingSafeEqual)(offered, Buffer.from(expected, 'utf8'))) {
110
+ throw new Error(IMPOSTOR);
111
+ }
112
+ });
113
+ /**
114
+ * Asks the running Timetrack app to carry out one operation.
115
+ *
116
+ * It is the only way this package reaches Jira. The token lives in the app's keychain entry and in no
117
+ * repository, so a checkout an agent works in holds nothing worth stealing and nothing to rotate.
118
+ */
119
+ const askTimetrack = (request) => __awaiter(void 0, void 0, void 0, function* () {
120
+ const discovery = readDiscovery();
121
+ const client = (0, exports.timetrackClientName)();
122
+ yield proveTheServer(discovery);
123
+ let response;
124
+ try {
125
+ response = yield fetch(`http://127.0.0.1:${discovery.port}${PATH}`, {
126
+ method: 'POST',
127
+ headers: { authorization: `Bearer ${discovery.token}`, 'content-type': 'application/json' },
128
+ body: JSON.stringify(client ? Object.assign(Object.assign({}, request), { client }) : request),
129
+ redirect: 'error',
130
+ signal: AbortSignal.timeout(TIMEOUT_MS),
131
+ });
132
+ }
133
+ catch (_a) {
134
+ // The file is there and the socket is not, which is what a discovery file left behind by an app
135
+ // that has since stopped looks like.
136
+ throw new Error(NOT_RUNNING);
137
+ }
138
+ if (response.status === 401) {
139
+ throw new Error('Timetrack refused the token. It writes a new one at every start — restart the app.');
140
+ }
141
+ if (!response.ok)
142
+ throw new Error(`Timetrack answered ${response.status} ${response.statusText}.`);
143
+ const answer = (yield response.json());
144
+ if (!answer.ok)
145
+ throw new Error(answer.message);
146
+ return answer.value;
147
+ });
148
+ exports.askTimetrack = askTimetrack;
149
+ const timetrackStatus = () => (0, exports.askTimetrack)({ op: 'status' });
150
+ exports.timetrackStatus = timetrackStatus;
151
+ const timetrackNaming = (day) => (0, exports.askTimetrack)({ op: 'naming.offers', day });
152
+ exports.timetrackNaming = timetrackNaming;
153
+ const timetrackInstance = () => (0, exports.askTimetrack)({ op: 'jira.instance' });
154
+ exports.timetrackInstance = timetrackInstance;
155
+ const timetrackIssue = (key) => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)({ op: 'jira.issue', key })).issue; });
156
+ exports.timetrackIssue = timetrackIssue;
157
+ const timetrackSearch = (options) => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)(Object.assign({ op: 'jira.search' }, options))).issues; });
158
+ exports.timetrackSearch = timetrackSearch;
159
+ const timetrackRepoProject = (repoPath) => (0, exports.askTimetrack)({ op: 'repo.project', repoPath });
160
+ exports.timetrackRepoProject = timetrackRepoProject;
161
+ /** Queues a new issue, filed with the app's own ticket settings once the user approves it. */
162
+ const timetrackCreateIssue = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'jira.create' }, options));
163
+ exports.timetrackCreateIssue = timetrackCreateIssue;
164
+ /** Queues a row for the day it belongs to. It is a row on the day once approved, not a Tempo entry. */
165
+ const timetrackAddWorklog = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'worklog.add' }, options));
166
+ exports.timetrackAddWorklog = timetrackAddWorklog;
167
+ const timetrackDayEvents = (day) => (0, exports.askTimetrack)({ op: 'day.events', day });
168
+ exports.timetrackDayEvents = timetrackDayEvents;
169
+ const timetrackTranscriptDay = (day) => (0, exports.askTimetrack)({ op: 'transcript.day', day });
170
+ exports.timetrackTranscriptDay = timetrackTranscriptDay;
171
+ const timetrackDayRows = (day) => (0, exports.askTimetrack)({ op: 'day.rows', day });
172
+ exports.timetrackDayRows = timetrackDayRows;
173
+ /**
174
+ * Queues the stated edits to a day's rows. Once approved, the result is the day as it reads afterwards.
175
+ *
176
+ * `applied` in that result counts the edits that found their row: a day the collectors keep changing
177
+ * can drop a row a caller read a moment ago.
178
+ */
179
+ const timetrackEditDay = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'day.edits' }, options));
180
+ exports.timetrackEditDay = timetrackEditDay;
181
+ /** Reads the user's own Tempo worklogs from Tempo, both days included. The app caps the span at 92 days. */
182
+ const timetrackTempoWorklogs = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'tempo.worklogs' }, options));
183
+ exports.timetrackTempoWorklogs = timetrackTempoWorklogs;
184
+ /**
185
+ * Plans a Tempo sync of one day exactly as the app's Sync page does. It writes nothing, so it is
186
+ * answered at once. The app moves its review to the day.
187
+ */
188
+ const timetrackTempoSync = (day) => (0, exports.askTimetrack)({ op: 'tempo.sync', day });
189
+ exports.timetrackTempoSync = timetrackTempoSync;
190
+ /** Queues the write of the plan whose hash the user confirmed. The app checks the hash again on approval. */
191
+ const timetrackTempoSyncWrite = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'tempo.sync' }, options));
192
+ exports.timetrackTempoSyncWrite = timetrackTempoSyncWrite;
193
+ /**
194
+ * Queues the delete of one of the user's own Tempo worklogs. Once approved, the app refuses an id that
195
+ * is not among the account's own worklogs on `day`, and drops the ledger entry that owned it.
196
+ */
197
+ const timetrackTempoDelete = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'tempo.delete' }, options));
198
+ exports.timetrackTempoDelete = timetrackTempoDelete;
199
+ /** Reads the calendars the app watches, both days included. The app caps the span at 92 days. */
200
+ const timetrackCalendarEvents = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'calendar.events' }, options));
201
+ exports.timetrackCalendarEvents = timetrackCalendarEvents;
202
+ const timetrackRules = () => (0, exports.askTimetrack)({ op: 'settings.rules' });
203
+ exports.timetrackRules = timetrackRules;
204
+ /**
205
+ * Queues a read of the agent session logs under `paths` again, so sessions the app dropped while no
206
+ * project link held them are stored. Once approved, the read runs in the background.
207
+ *
208
+ * With `replace`, the re-read overwrites the samples, spend and prompts the store holds for those
209
+ * sessions, which is how a parser fix reaches days already stored.
210
+ */
211
+ const timetrackResyncAgentSessions = (paths, options = {}) => (0, exports.askTimetrack)(Object.assign({ op: 'agentSessions.resync', paths }, (options.replace ? { replace: true } : {})));
212
+ exports.timetrackResyncAgentSessions = timetrackResyncAgentSessions;
213
+ const timetrackStandIns = () => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, exports.askTimetrack)({ op: 'standIn.list' })).standIns; });
214
+ exports.timetrackStandIns = timetrackStandIns;
215
+ /**
216
+ * Queues the delete of one placeholder. Once approved, the result is the list as it reads afterwards.
217
+ *
218
+ * The rule pointing at it goes with it. A record the app opened for one branch refuses that branch as
219
+ * it goes, so no second one opens for it; a record naming no branch refuses nothing, and the next
220
+ * pass may open one at whatever grain the day reads.
221
+ */
222
+ const timetrackRemoveStandIn = (id) => (0, exports.askTimetrack)({ op: 'standIn.remove', id });
223
+ exports.timetrackRemoveStandIn = timetrackRemoveStandIn;
224
+ /**
225
+ * Queues another name for one placeholder. Once approved, the result is the list as it reads afterwards.
226
+ *
227
+ * Only the name changes. The days it holds and the rules that name it stay, which is what a delete
228
+ * and a fresh record would lose.
229
+ */
230
+ const timetrackRenameStandIn = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'standIn.rename' }, options));
231
+ exports.timetrackRenameStandIn = timetrackRenameStandIn;
232
+ /**
233
+ * Queues the merge of one open placeholder into another. Once approved, the result is the list as it
234
+ * reads afterwards. The kept one takes the days and the rules of both.
235
+ */
236
+ const timetrackMergeStandIn = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'standIn.merge' }, options));
237
+ exports.timetrackMergeStandIn = timetrackMergeStandIn;
238
+ /**
239
+ * Queues the resolve of one placeholder to a Jira issue, as the user's pick in the app does. A resolved
240
+ * one moves to the new issue. The app checks both exist before it queues; once approved, the result is
241
+ * the list as it reads afterwards.
242
+ */
243
+ const timetrackResolveStandIn = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'standIn.resolve' }, options));
244
+ exports.timetrackResolveStandIn = timetrackResolveStandIn;
245
+ /**
246
+ * Plans the cut of one placeholder into one per directory it turned out to cover, and writes nothing.
247
+ *
248
+ * The commits come from the caller: one
249
+ * collected before Timetrack read file paths carries none, so only `git log --name-only` can say.
250
+ * A checkout whose commits name more directories than a grain can hold has no automatic reading,
251
+ * and `paths` is how the user picks which of them are the pieces.
252
+ */
253
+ const timetrackSplitStandIn = (options) => (0, exports.askTimetrack)(Object.assign(Object.assign({ op: 'standIn.split' }, options), { apply: false }));
254
+ exports.timetrackSplitStandIn = timetrackSplitStandIn;
255
+ /** Queues the split `timetrackSplitStandIn` planned, with the same options. */
256
+ const timetrackApplyStandInSplit = (options) => (0, exports.askTimetrack)(Object.assign(Object.assign({ op: 'standIn.split' }, options), { apply: true }));
257
+ exports.timetrackApplyStandInSplit = timetrackApplyStandInSplit;
258
+ /** Where a write this caller queued stands, and what it answered once the user approved it. */
259
+ const timetrackApprovalStatus = (id) => (0, exports.askTimetrack)({ op: 'approval.status', id });
260
+ exports.timetrackApprovalStatus = timetrackApprovalStatus;
261
+ /** The writes that wait in the app now, from every caller, in the order its queue panel lists them. */
262
+ const timetrackApprovals = () => (0, exports.askTimetrack)({ op: 'approvals.list' });
263
+ exports.timetrackApprovals = timetrackApprovals;
264
+ /**
265
+ * Rejects one write that waits, as the user's Reject press does, and answers at once. The app refuses an
266
+ * item that no longer waits. There is no approving counterpart: only the user approves, in the app.
267
+ */
268
+ const timetrackRejectApproval = (id) => (0, exports.askTimetrack)({ op: 'approval.reject', id });
269
+ exports.timetrackRejectApproval = timetrackRejectApproval;
270
+ /**
271
+ * Asks auto mode about one subject of a day again, as the app's "Ask auto mode again" does, and answers
272
+ * at once with what it queued. The new answer replaces the stored one later; it writes nothing to Jira or
273
+ * Tempo, and whatever it queues waits for the user's approval as auto mode's own does.
274
+ */
275
+ const timetrackAskAutoMode = (options) => (0, exports.askTimetrack)(Object.assign({ op: 'autoMode.ask', day: options.day }, (options.subject.kind === 'stand-in'
276
+ ? { standInId: options.subject.standInId }
277
+ : { contextId: options.subject.contextId })));
278
+ exports.timetrackAskAutoMode = timetrackAskAutoMode;
279
+ //# 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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"}