@aitne-sh/aitne 0.1.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.
Files changed (249) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +464 -0
  3. package/agent-assets/agent-profiles/_safety.md +26 -0
  4. package/agent-assets/agent-profiles/conversational.md +33 -0
  5. package/agent-assets/agent-profiles/docs-qa.md +24 -0
  6. package/agent-assets/agent-profiles/observer.md +28 -0
  7. package/agent-assets/agent-profiles/profile-importer.md +63 -0
  8. package/agent-assets/agent-profiles/proxy.md +28 -0
  9. package/agent-assets/agent-profiles/routine.md +16 -0
  10. package/agent-assets/agent-profiles/task.md +18 -0
  11. package/agent-assets/docs/concepts/agent-day.md +88 -0
  12. package/agent-assets/docs/concepts/auth-health.md +75 -0
  13. package/agent-assets/docs/concepts/backends-and-tiers.md +126 -0
  14. package/agent-assets/docs/concepts/costs-and-quotas.md +103 -0
  15. package/agent-assets/docs/concepts/delegated-mode.md +223 -0
  16. package/agent-assets/docs/concepts/memory-model.md +118 -0
  17. package/agent-assets/docs/concepts/observations.md +80 -0
  18. package/agent-assets/docs/concepts/process-keys.md +89 -0
  19. package/agent-assets/docs/concepts/routines.md +108 -0
  20. package/agent-assets/docs/concepts/safety-and-execution.md +109 -0
  21. package/agent-assets/docs/concepts/safety-model.md +279 -0
  22. package/agent-assets/docs/concepts/skills.md +100 -0
  23. package/agent-assets/docs/features/integrations/calendar.md +92 -0
  24. package/agent-assets/docs/features/integrations/git.md +95 -0
  25. package/agent-assets/docs/features/integrations/github.md +170 -0
  26. package/agent-assets/docs/features/integrations/mail.md +106 -0
  27. package/agent-assets/docs/features/integrations/notion.md +69 -0
  28. package/agent-assets/docs/features/integrations/obsidian.md +71 -0
  29. package/agent-assets/docs/features/lifestyle/git.md +178 -0
  30. package/agent-assets/docs/features/lifestyle/reading.md +93 -0
  31. package/agent-assets/docs/features/lifestyle/receipts.md +71 -0
  32. package/agent-assets/docs/features/lifestyle/travel-bookings.md +44 -0
  33. package/agent-assets/docs/features/lifestyle/travel-time.md +52 -0
  34. package/agent-assets/docs/features/memory-files/agent-journal.md +105 -0
  35. package/agent-assets/docs/features/memory-files/projects.md +56 -0
  36. package/agent-assets/docs/features/memory-files/roadmap.md +61 -0
  37. package/agent-assets/docs/features/memory-files/schedule.md +112 -0
  38. package/agent-assets/docs/features/memory-files/today.md +73 -0
  39. package/agent-assets/docs/features/memory-files/user-profile.md +81 -0
  40. package/agent-assets/docs/features/messaging/dashboard-chat.md +93 -0
  41. package/agent-assets/docs/features/messaging/discord.md +50 -0
  42. package/agent-assets/docs/features/messaging/overview.md +111 -0
  43. package/agent-assets/docs/features/messaging/pairing-and-magic-phrase.md +69 -0
  44. package/agent-assets/docs/features/messaging/slack.md +51 -0
  45. package/agent-assets/docs/features/messaging/telegram.md +63 -0
  46. package/agent-assets/docs/features/messaging/whatsapp.md +48 -0
  47. package/agent-assets/docs/features/operations/activity-and-conversations.md +105 -0
  48. package/agent-assets/docs/features/operations/approvals.md +58 -0
  49. package/agent-assets/docs/features/operations/backend-routing.md +62 -0
  50. package/agent-assets/docs/features/operations/cost-tracking.md +59 -0
  51. package/agent-assets/docs/features/operations/notifications.md +69 -0
  52. package/agent-assets/docs/features/operations/quiet-hours.md +106 -0
  53. package/agent-assets/docs/features/operations/schedule-approaching.md +60 -0
  54. package/agent-assets/docs/features/routines/custom-routines.md +101 -0
  55. package/agent-assets/docs/features/routines/evening-review.md +81 -0
  56. package/agent-assets/docs/features/routines/hourly-check.md +85 -0
  57. package/agent-assets/docs/features/routines/monthly-review.md +65 -0
  58. package/agent-assets/docs/features/routines/morning-routine.md +123 -0
  59. package/agent-assets/docs/features/routines/weekly-review.md +70 -0
  60. package/agent-assets/docs/getting-started/01-what-is-this.md +192 -0
  61. package/agent-assets/docs/getting-started/02-first-steps.md +80 -0
  62. package/agent-assets/docs/getting-started/03-what-can-this-do.md +110 -0
  63. package/agent-assets/docs/getting-started/04-first-day.md +287 -0
  64. package/agent-assets/docs/glossary.md +116 -0
  65. package/agent-assets/docs/guides/add-a-custom-routine.md +71 -0
  66. package/agent-assets/docs/guides/backup-and-restore.md +54 -0
  67. package/agent-assets/docs/guides/change-which-model-handles-x.md +47 -0
  68. package/agent-assets/docs/guides/connect-a-new-mail-account.md +59 -0
  69. package/agent-assets/docs/guides/import-knowledge-file.md +275 -0
  70. package/agent-assets/docs/guides/install-and-run.md +72 -0
  71. package/agent-assets/docs/guides/migrate-machines.md +52 -0
  72. package/agent-assets/docs/guides/pause-the-agent.md +65 -0
  73. package/agent-assets/docs/guides/reinstall-cleanly.md +52 -0
  74. package/agent-assets/docs/guides/setup-wizard.md +107 -0
  75. package/agent-assets/docs/guides/switch-default-backend.md +60 -0
  76. package/agent-assets/docs/reference/api.md +51 -0
  77. package/agent-assets/docs/reference/cli-commands.md +121 -0
  78. package/agent-assets/docs/reference/config.md +74 -0
  79. package/agent-assets/docs/reference/disallowed-tools.md +76 -0
  80. package/agent-assets/docs/reference/keyboard-shortcuts.md +39 -0
  81. package/agent-assets/docs/reference/process-keys.md +59 -0
  82. package/agent-assets/docs/reference/skills.md +50 -0
  83. package/agent-assets/docs/troubleshooting/auth-failed.md +57 -0
  84. package/agent-assets/docs/troubleshooting/dashboard-shows-degraded.md +55 -0
  85. package/agent-assets/docs/troubleshooting/fallback-keeps-firing.md +54 -0
  86. package/agent-assets/docs/troubleshooting/messaging-not-pairing.md +53 -0
  87. package/agent-assets/docs/troubleshooting/morning-routine-didnt-run.md +75 -0
  88. package/agent-assets/docs/troubleshooting/observation-not-detected.md +57 -0
  89. package/agent-assets/docs/troubleshooting/quota-exhausted.md +57 -0
  90. package/agent-assets/optimizer-skills/drift-analysis/SKILL.md +75 -0
  91. package/agent-assets/optimizer-skills/knowledge-map/SKILL.md +71 -0
  92. package/agent-assets/optimizer-skills/skill-curation/SKILL.md +108 -0
  93. package/agent-assets/project-doc-templates/git-repo.md +21 -0
  94. package/agent-assets/project-doc-templates/project.md +38 -0
  95. package/agent-assets/skills/attach/SKILL.md +104 -0
  96. package/agent-assets/skills/context/SKILL.md +257 -0
  97. package/agent-assets/skills/context/curation.json +37 -0
  98. package/agent-assets/skills/context/seeds/file-responsibilities.seed.json +13 -0
  99. package/agent-assets/skills/context/seeds/frontmatter-requirements.seed.json +40 -0
  100. package/agent-assets/skills/docs-search/SKILL.md +176 -0
  101. package/agent-assets/skills/external-services/SKILL.delegated.claude.md +369 -0
  102. package/agent-assets/skills/external-services/SKILL.delegated.codex.md +349 -0
  103. package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +347 -0
  104. package/agent-assets/skills/external-services/SKILL.md +371 -0
  105. package/agent-assets/skills/mail/SKILL.delegated.claude.md +284 -0
  106. package/agent-assets/skills/mail/SKILL.delegated.codex.md +261 -0
  107. package/agent-assets/skills/mail/SKILL.delegated.gemini.md +255 -0
  108. package/agent-assets/skills/mail/SKILL.md +313 -0
  109. package/agent-assets/skills/mail/references/errors.md +17 -0
  110. package/agent-assets/skills/mail/references/providers.md +40 -0
  111. package/agent-assets/skills/mail/references/query-grammar.md +24 -0
  112. package/agent-assets/skills/management-policy/SKILL.md +307 -0
  113. package/agent-assets/skills/management-policy/curation.json +13 -0
  114. package/agent-assets/skills/management-policy/seeds/policy-file-shape.seed.json +16 -0
  115. package/agent-assets/skills/management-task-modify/SKILL.md +202 -0
  116. package/agent-assets/skills/management-task-register/SKILL.md +330 -0
  117. package/agent-assets/skills/management-task-stop/SKILL.md +166 -0
  118. package/agent-assets/skills/notify/SKILL.md +196 -0
  119. package/agent-assets/skills/notion/SKILL.delegated.claude.md +254 -0
  120. package/agent-assets/skills/notion/SKILL.delegated.codex.md +195 -0
  121. package/agent-assets/skills/notion/SKILL.delegated.gemini.md +194 -0
  122. package/agent-assets/skills/notion/SKILL.md +86 -0
  123. package/agent-assets/skills/observations/SKILL.md +234 -0
  124. package/agent-assets/skills/observations/curation.json +13 -0
  125. package/agent-assets/skills/observations/seeds/source-namespacing.seed.json +20 -0
  126. package/agent-assets/skills/project-doc/SKILL.md +86 -0
  127. package/agent-assets/skills/project-doc/curation.json +21 -0
  128. package/agent-assets/skills/project-doc/seeds/project-shape.seed.json +25 -0
  129. package/agent-assets/skills/project-doc/seeds/slug-grammar.seed.json +20 -0
  130. package/agent-assets/skills/reading/SKILL.md +198 -0
  131. package/agent-assets/skills/reading/references/reading-taste.md +197 -0
  132. package/agent-assets/skills/receipts/SKILL.md +134 -0
  133. package/agent-assets/skills/roadmap/SKILL.md +276 -0
  134. package/agent-assets/skills/roadmap/curation.json +13 -0
  135. package/agent-assets/skills/roadmap/references/horizon-tags.md +40 -0
  136. package/agent-assets/skills/roadmap/references/preparation-timeline.md +47 -0
  137. package/agent-assets/skills/roadmap/seeds/entry-types.seed.json +16 -0
  138. package/agent-assets/skills/schedule/SKILL.md +228 -0
  139. package/agent-assets/skills/scheduled-managed-task/SKILL.md +392 -0
  140. package/agent-assets/skills/today/SKILL.md +198 -0
  141. package/agent-assets/skills/today/curation.json +21 -0
  142. package/agent-assets/skills/today/seeds/agent-notes-flavors.seed.json +17 -0
  143. package/agent-assets/skills/today/seeds/section-shape.seed.json +17 -0
  144. package/agent-assets/skills/travel/SKILL.md +132 -0
  145. package/agent-assets/skills/travel-time/SKILL.md +149 -0
  146. package/agent-assets/skills/user-interview/SKILL.md +323 -0
  147. package/agent-assets/skills/user-interview/references/sweep-and-fallback.md +94 -0
  148. package/agent-assets/skills/user-profile/SKILL.md +210 -0
  149. package/agent-assets/skills/user-profile/curation.json +29 -0
  150. package/agent-assets/skills/user-profile/seeds/learned-context-format.seed.json +14 -0
  151. package/agent-assets/skills/user-profile/seeds/routing-table.seed.json +53 -0
  152. package/agent-assets/skills/user-profile/seeds/topic-files.seed.json +27 -0
  153. package/agent-assets/task-flows/dashboard.docs_qa.md +43 -0
  154. package/agent-assets/task-flows/default.md +11 -0
  155. package/agent-assets/task-flows/git.branch.created.md +25 -0
  156. package/agent-assets/task-flows/git.lifecycle.poll.md +52 -0
  157. package/agent-assets/task-flows/git.local_ahead.stale.md +34 -0
  158. package/agent-assets/task-flows/git.merge_to_default.md +30 -0
  159. package/agent-assets/task-flows/git.project.refresh_architecture.md +100 -0
  160. package/agent-assets/task-flows/git.project.retemplate.md +73 -0
  161. package/agent-assets/task-flows/git.push.detected.md +32 -0
  162. package/agent-assets/task-flows/git.push.force_pushed.md +36 -0
  163. package/agent-assets/task-flows/git.tag.created.md +24 -0
  164. package/agent-assets/task-flows/github.assigned.md +43 -0
  165. package/agent-assets/task-flows/github.pull_request.review_requested.md +57 -0
  166. package/agent-assets/task-flows/github.security_alert.md +45 -0
  167. package/agent-assets/task-flows/github.workflow_run.failed.md +57 -0
  168. package/agent-assets/task-flows/knowledge.import.md +161 -0
  169. package/agent-assets/task-flows/message.received.dm.md +142 -0
  170. package/agent-assets/task-flows/message.received.dm_first.md +117 -0
  171. package/agent-assets/task-flows/message.received.md +14 -0
  172. package/agent-assets/task-flows/routine.custom.md +38 -0
  173. package/agent-assets/task-flows/routine.evening_review.md +323 -0
  174. package/agent-assets/task-flows/routine.hourly_check.delegated.claude.md +405 -0
  175. package/agent-assets/task-flows/routine.hourly_check.delegated.codex.md +400 -0
  176. package/agent-assets/task-flows/routine.hourly_check.delegated.gemini.md +404 -0
  177. package/agent-assets/task-flows/routine.hourly_check.md +184 -0
  178. package/agent-assets/task-flows/routine.hourly_check.triage.md +93 -0
  179. package/agent-assets/task-flows/routine.monthly_review.md +250 -0
  180. package/agent-assets/task-flows/routine.morning_routine.md +300 -0
  181. package/agent-assets/task-flows/routine.morning_routine_initial.md +184 -0
  182. package/agent-assets/task-flows/routine.roadmap_refresh.md +275 -0
  183. package/agent-assets/task-flows/routine.today_refresh.md +172 -0
  184. package/agent-assets/task-flows/routine.user_profile_sweep.md +242 -0
  185. package/agent-assets/task-flows/routine.weekly_review.md +247 -0
  186. package/agent-assets/task-flows/schedule.approaching.md +124 -0
  187. package/agent-assets/task-flows/scheduled.dm.md +391 -0
  188. package/agent-assets/task-flows/scheduled.task.md +141 -0
  189. package/agent-assets/task-flows/setup.initial.md +277 -0
  190. package/agent-assets/task-flows/setup.update.md +53 -0
  191. package/agent-assets/templates/README.md +85 -0
  192. package/agent-assets/templates/_index.md +39 -0
  193. package/agent-assets/templates/_manifest.json +103 -0
  194. package/agent-assets/templates/agent/journal.md +10 -0
  195. package/agent-assets/templates/agent/profile-questions.md +74 -0
  196. package/agent-assets/templates/context-index.md +42 -0
  197. package/agent-assets/templates/dossiers/_index.md +22 -0
  198. package/agent-assets/templates/dossiers/evening.md +23 -0
  199. package/agent-assets/templates/dossiers/hourly.md +23 -0
  200. package/agent-assets/templates/dossiers/monthly.md +23 -0
  201. package/agent-assets/templates/dossiers/morning.md +23 -0
  202. package/agent-assets/templates/dossiers/roadmap.md +23 -0
  203. package/agent-assets/templates/dossiers/weekly.md +23 -0
  204. package/agent-assets/templates/projects/_active.base +14 -0
  205. package/agent-assets/templates/projects/_index.md +29 -0
  206. package/agent-assets/templates/roadmap.md +15 -0
  207. package/agent-assets/templates/routines/_index.md +20 -0
  208. package/agent-assets/templates/routines/evening.md +22 -0
  209. package/agent-assets/templates/routines/hourly.md +30 -0
  210. package/agent-assets/templates/routines/monthly.md +25 -0
  211. package/agent-assets/templates/routines/morning.md +26 -0
  212. package/agent-assets/templates/routines/weekly.md +23 -0
  213. package/agent-assets/templates/rules/_index.md +19 -0
  214. package/agent-assets/templates/rules/journal-export.md +41 -0
  215. package/agent-assets/templates/rules/journal-format.md +61 -0
  216. package/agent-assets/templates/rules/management.md +48 -0
  217. package/agent-assets/templates/rules/mcp.md +40 -0
  218. package/agent-assets/templates/rules/policies/_index.md +22 -0
  219. package/agent-assets/templates/rules/redaction.md +30 -0
  220. package/agent-assets/templates/today.md +13 -0
  221. package/agent-assets/templates/user/_index.md +16 -0
  222. package/agent-assets/templates/user/expertise.md +7 -0
  223. package/agent-assets/templates/user/goals.md +7 -0
  224. package/agent-assets/templates/user/people.md +7 -0
  225. package/agent-assets/templates/user/personal.md +7 -0
  226. package/agent-assets/templates/user/profile.md +28 -0
  227. package/agent-assets/templates/user/work.md +7 -0
  228. package/bin/aitne.mjs +1096 -0
  229. package/package.json +78 -0
  230. package/personal-agent.mjs +39 -0
  231. package/scripts/browser.mjs +99 -0
  232. package/scripts/check-redaction-coverage.mjs +109 -0
  233. package/scripts/commands/audit.mjs +309 -0
  234. package/scripts/commands/doctor.mjs +437 -0
  235. package/scripts/commands/open.mjs +40 -0
  236. package/scripts/commands/setup.mjs +21 -0
  237. package/scripts/commands/uninstall.mjs +114 -0
  238. package/scripts/commands/update.mjs +96 -0
  239. package/scripts/commands/version.mjs +62 -0
  240. package/scripts/commands.md +0 -0
  241. package/scripts/lib/sqlite-loader.mjs +49 -0
  242. package/scripts/message-discipline-digest.mjs +535 -0
  243. package/scripts/poc/google-connector-inheritance/REPORT.md +197 -0
  244. package/scripts/poc/google-connector-inheritance/claude-sdk-probe.mjs +79 -0
  245. package/scripts/remint-roadmap-ids.mjs +257 -0
  246. package/scripts/rm-paths.mjs +22 -0
  247. package/scripts/run-node.mjs +223 -0
  248. package/scripts/smoke-obsidian-api.mjs +166 -0
  249. package/scripts/start.mjs +160 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * `aitne update` — print the npm command to upgrade.
3
+ *
4
+ * No self-updater. Self-updaters break weirdly (permissions, registry
5
+ * redirects, partial writes) and npm already solves this. We only emit
6
+ * instructions; the user runs the command.
7
+ *
8
+ * Optional `--check` performs one short network call to compare against the
9
+ * latest published version. Default behavior is offline so the command stays
10
+ * fast and works on planes/trains.
11
+ */
12
+ export async function run(args, ctx) {
13
+ if (args.includes("--help") || args.includes("-h")) {
14
+ console.log(`Usage: aitne update [--check]
15
+
16
+ Print the command to upgrade ${ctx.APP_NAME}. Does not actually upgrade —
17
+ self-updaters fail in surprising ways, so the user runs the command.
18
+
19
+ Flags:
20
+ --check Make one network call to npm to fetch the latest version.
21
+ Without --check, this command is offline.`);
22
+ return;
23
+ }
24
+
25
+ const cmd = `npm install -g ${packageNameForUpgrade()}@latest`;
26
+ console.log(`${ctx.APP_NAME} v${ctx.VERSION} is installed.`);
27
+ console.log("");
28
+ console.log("To upgrade:");
29
+ console.log("");
30
+ console.log(` ${cmd}`);
31
+ console.log("");
32
+ console.log("After the upgraded daemon starts, bundled templates, docs, skills, and");
33
+ console.log("backend instruction caches are reconciled non-destructively. User-edited");
34
+ console.log("files are preserved and surfaced in the dashboard for review.");
35
+ console.log("");
36
+ console.log("Or run a one-shot session without installing:");
37
+ console.log("");
38
+ console.log(` npx ${packageNameForUpgrade()}@latest start`);
39
+
40
+ if (args.includes("--check")) {
41
+ const latest = await fetchLatestVersion(packageNameForUpgrade());
42
+ if (latest) {
43
+ const cmp = compareSemver(ctx.VERSION, latest);
44
+ console.log("");
45
+ if (cmp < 0) {
46
+ console.log(`A newer version is available: ${latest} (current: ${ctx.VERSION}).`);
47
+ } else if (cmp === 0) {
48
+ console.log(`You are on the latest version (${latest}).`);
49
+ } else {
50
+ console.log(`You are ahead of the latest published version (${latest}).`);
51
+ }
52
+ } else {
53
+ console.log("");
54
+ console.log("(could not reach the npm registry — version check skipped)");
55
+ }
56
+ }
57
+ }
58
+
59
+ /**
60
+ * The published package name on npm. Hardcoded here rather than read from
61
+ * package.json so a maintainer who renames the in-repo package locally
62
+ * doesn't accidentally direct users to the wrong upgrade target.
63
+ */
64
+ function packageNameForUpgrade() {
65
+ return "@aitne-sh/aitne";
66
+ }
67
+
68
+ async function fetchLatestVersion(name) {
69
+ try {
70
+ const ctrl = new AbortController();
71
+ const t = setTimeout(() => ctrl.abort(), 4000);
72
+ const res = await fetch(`https://registry.npmjs.org/${encodeURIComponent(name)}/latest`, {
73
+ signal: ctrl.signal,
74
+ headers: { Accept: "application/json" },
75
+ });
76
+ clearTimeout(t);
77
+ if (!res.ok) return null;
78
+ const body = await res.json();
79
+ return typeof body?.version === "string" ? body.version : null;
80
+ } catch {
81
+ return null;
82
+ }
83
+ }
84
+
85
+ /** Tiny semver-ish comparator; returns -1 / 0 / 1. Pre-release tags ignored. */
86
+ function compareSemver(a, b) {
87
+ const pa = a.split("-")[0].split(".").map((n) => parseInt(n, 10) || 0);
88
+ const pb = b.split("-")[0].split(".").map((n) => parseInt(n, 10) || 0);
89
+ for (let i = 0; i < 3; i++) {
90
+ const da = pa[i] ?? 0;
91
+ const db = pb[i] ?? 0;
92
+ if (da < db) return -1;
93
+ if (da > db) return 1;
94
+ }
95
+ return 0;
96
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `aitne version` — print version and execution environment.
3
+ *
4
+ * Detail beyond a bare semver helps when triaging install issues remotely
5
+ * ("what version of node, where is it installed, what platform?"). All of
6
+ * this is local-only — no network calls. For "is there a newer version?"
7
+ * use `aitne update` instead, which is opt-in.
8
+ */
9
+ import fs from "node:fs";
10
+ import os from "node:os";
11
+ import path from "node:path";
12
+ import { hasPackagedBuild } from "../run-node.mjs";
13
+
14
+ export async function run(args, ctx) {
15
+ if (args.includes("--help") || args.includes("-h")) {
16
+ console.log(`Usage: aitne version
17
+
18
+ Print version, Node version, install path, and platform.
19
+
20
+ This command is offline — to check for newer published versions, use
21
+ \`aitne update\`.`);
22
+ return;
23
+ }
24
+
25
+ if (args.includes("--json")) {
26
+ const payload = collectVersion(ctx);
27
+ process.stdout.write(JSON.stringify(payload, null, 2) + "\n");
28
+ return;
29
+ }
30
+
31
+ const v = collectVersion(ctx);
32
+ console.log(`${ctx.APP_NAME} v${v.version}`);
33
+ console.log("");
34
+ console.log(` Node: ${v.node}`);
35
+ console.log(` Platform: ${v.platform} (${v.arch})`);
36
+ console.log(` Install: ${v.installPath}`);
37
+ console.log(` Data dir: ${v.dataDir}`);
38
+ console.log(` Build: ${v.buildAt ?? (v.packagedBuild ? "packaged artifacts" : "(not built — run 'aitne build')")}`);
39
+ }
40
+
41
+ function collectVersion(ctx) {
42
+ let buildAt = null;
43
+ const stamp = path.join(ctx.PROJECT_ROOT, ".buildstamp");
44
+ if (fs.existsSync(stamp)) {
45
+ try {
46
+ const parsed = JSON.parse(fs.readFileSync(stamp, "utf8"));
47
+ if (parsed?.builtAt) buildAt = new Date(parsed.builtAt).toISOString();
48
+ } catch { /* malformed stamp — treat as missing */ }
49
+ }
50
+ return {
51
+ name: ctx.APP_NAME,
52
+ version: ctx.VERSION,
53
+ node: process.version,
54
+ platform: process.platform,
55
+ arch: process.arch,
56
+ installPath: ctx.PROJECT_ROOT,
57
+ dataDir: ctx.DATA_DIR,
58
+ homeDir: os.homedir(),
59
+ buildAt,
60
+ packagedBuild: buildAt == null && hasPackagedBuild(ctx.PROJECT_ROOT),
61
+ };
62
+ }
File without changes
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Cross-context loader for better-sqlite3.
3
+ *
4
+ * The package ships as a daemon dependency. In two of our contexts it
5
+ * resolves at the top level via standard ESM:
6
+ *
7
+ * 1. After `npm install -g aitne` — the prepack flatten makes daemon
8
+ * dependencies top-level for the published package, so `import`
9
+ * resolves cleanly.
10
+ * 2. In the published package's tarball regardless of how it was
11
+ * installed locally.
12
+ *
13
+ * In the dev repo, however, pnpm 10 keeps daemon deps under
14
+ * `packages/daemon/node_modules/`. `import("better-sqlite3")` from a
15
+ * top-level CLI script (bin/aitne.mjs, scripts/commands/*.mjs) returns
16
+ * ERR_MODULE_NOT_FOUND. This helper falls back to the daemon's own
17
+ * resolver in that case so the dev-time CLI behaves identically to the
18
+ * installed CLI.
19
+ *
20
+ * Returns the default-exported `Database` constructor.
21
+ */
22
+ import { createRequire } from "node:module";
23
+ import fs from "node:fs";
24
+ import path from "node:path";
25
+ import { pathToFileURL } from "node:url";
26
+
27
+ export async function loadBetterSqlite3(projectRoot) {
28
+ // Standard path first.
29
+ try {
30
+ const mod = await import("better-sqlite3");
31
+ return mod.default ?? mod;
32
+ } catch (err) {
33
+ if (err?.code !== "ERR_MODULE_NOT_FOUND") throw err;
34
+ }
35
+
36
+ // Dev fallback — resolve via the daemon's own require.
37
+ const daemonPkgPath = path.join(projectRoot, "packages", "daemon", "package.json");
38
+ if (!fs.existsSync(daemonPkgPath)) {
39
+ const err = new Error(
40
+ "better-sqlite3 is not installed. Run `pnpm install` from the repo root, "
41
+ + "or reinstall the npm package.",
42
+ );
43
+ err.code = "ERR_MODULE_NOT_FOUND";
44
+ throw err;
45
+ }
46
+ const req = createRequire(pathToFileURL(daemonPkgPath));
47
+ // require() returns the constructor directly for better-sqlite3.
48
+ return req("better-sqlite3");
49
+ }