axgram 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 (90) hide show
  1. package/README.md +126 -0
  2. package/dist/bin/axgram-hook.js +77 -0
  3. package/dist/bin/axgram-hook.js.map +1 -0
  4. package/dist/bin/axgram.js +386 -0
  5. package/dist/bin/axgram.js.map +1 -0
  6. package/dist/commands/hook-session-start.js +85 -0
  7. package/dist/commands/hook-session-start.js.map +1 -0
  8. package/dist/commands/hook-stop.js +73 -0
  9. package/dist/commands/hook-stop.js.map +1 -0
  10. package/dist/commands/import.js +56 -0
  11. package/dist/commands/import.js.map +1 -0
  12. package/dist/commands/invitations.js +153 -0
  13. package/dist/commands/invitations.js.map +1 -0
  14. package/dist/commands/login.js +125 -0
  15. package/dist/commands/login.js.map +1 -0
  16. package/dist/commands/logout.js +11 -0
  17. package/dist/commands/logout.js.map +1 -0
  18. package/dist/commands/members.js +231 -0
  19. package/dist/commands/members.js.map +1 -0
  20. package/dist/commands/mine.js +78 -0
  21. package/dist/commands/mine.js.map +1 -0
  22. package/dist/commands/orgs.js +153 -0
  23. package/dist/commands/orgs.js.map +1 -0
  24. package/dist/commands/projects.js +285 -0
  25. package/dist/commands/projects.js.map +1 -0
  26. package/dist/commands/teams.js +153 -0
  27. package/dist/commands/teams.js.map +1 -0
  28. package/dist/commands/whoami.js +27 -0
  29. package/dist/commands/whoami.js.map +1 -0
  30. package/dist/lib/auth.js +128 -0
  31. package/dist/lib/auth.js.map +1 -0
  32. package/dist/lib/chunkers/exchange-pair.js +51 -0
  33. package/dist/lib/chunkers/exchange-pair.js.map +1 -0
  34. package/dist/lib/chunkers/index.js +74 -0
  35. package/dist/lib/chunkers/index.js.map +1 -0
  36. package/dist/lib/chunkers/line-group.js +20 -0
  37. package/dist/lib/chunkers/line-group.js.map +1 -0
  38. package/dist/lib/chunkers/paragraph.js +29 -0
  39. package/dist/lib/chunkers/paragraph.js.map +1 -0
  40. package/dist/lib/chunkers/types.js +3 -0
  41. package/dist/lib/chunkers/types.js.map +1 -0
  42. package/dist/lib/config-dir.js +30 -0
  43. package/dist/lib/config-dir.js.map +1 -0
  44. package/dist/lib/destructive-confirm.js +71 -0
  45. package/dist/lib/destructive-confirm.js.map +1 -0
  46. package/dist/lib/entity-extractor.js +182 -0
  47. package/dist/lib/entity-extractor.js.map +1 -0
  48. package/dist/lib/global-config.js +42 -0
  49. package/dist/lib/global-config.js.map +1 -0
  50. package/dist/lib/hook-settings.js +87 -0
  51. package/dist/lib/hook-settings.js.map +1 -0
  52. package/dist/lib/hook-state.js +38 -0
  53. package/dist/lib/hook-state.js.map +1 -0
  54. package/dist/lib/importers/chatgpt.js +89 -0
  55. package/dist/lib/importers/chatgpt.js.map +1 -0
  56. package/dist/lib/importers/claude.js +47 -0
  57. package/dist/lib/importers/claude.js.map +1 -0
  58. package/dist/lib/importers/gemini.js +38 -0
  59. package/dist/lib/importers/gemini.js.map +1 -0
  60. package/dist/lib/importers/markdown.js +47 -0
  61. package/dist/lib/importers/markdown.js.map +1 -0
  62. package/dist/lib/importers/obsidian.js +62 -0
  63. package/dist/lib/importers/obsidian.js.map +1 -0
  64. package/dist/lib/importers/run.js +51 -0
  65. package/dist/lib/importers/run.js.map +1 -0
  66. package/dist/lib/ingest.js +101 -0
  67. package/dist/lib/ingest.js.map +1 -0
  68. package/dist/lib/mcp-client.js +56 -0
  69. package/dist/lib/mcp-client.js.map +1 -0
  70. package/dist/lib/project-resolver.js +42 -0
  71. package/dist/lib/project-resolver.js.map +1 -0
  72. package/dist/lib/remote-url.js +23 -0
  73. package/dist/lib/remote-url.js.map +1 -0
  74. package/dist/lib/repo-bindings.js +52 -0
  75. package/dist/lib/repo-bindings.js.map +1 -0
  76. package/dist/lib/repo.js +72 -0
  77. package/dist/lib/repo.js.map +1 -0
  78. package/dist/lib/room-detector.js +99 -0
  79. package/dist/lib/room-detector.js.map +1 -0
  80. package/dist/lib/slugify.js +17 -0
  81. package/dist/lib/slugify.js.map +1 -0
  82. package/dist/lib/supabase-client.js +35 -0
  83. package/dist/lib/supabase-client.js.map +1 -0
  84. package/dist/lib/tool-vocab.js +114 -0
  85. package/dist/lib/tool-vocab.js.map +1 -0
  86. package/dist/lib/transcript.js +68 -0
  87. package/dist/lib/transcript.js.map +1 -0
  88. package/dist/lib/walker.js +81 -0
  89. package/dist/lib/walker.js.map +1 -0
  90. package/package.json +47 -0
package/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # axgram
2
+
3
+ The CLI for Axgram — a multi-tenant AI memory system. The `axgram` binary
4
+ mines local codebases, imports conversation history from your AI tools,
5
+ and runs the auto-save hook for Claude Code. The `axgram-hook` binary is
6
+ a separate, slimmer entrypoint designed for Claude Code's `Stop` and
7
+ `SessionStart` hooks.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install -g axgram
13
+ ```
14
+
15
+ ## Quick start
16
+
17
+ ```bash
18
+ # 1. Authenticate (opens a browser for the magic-link flow)
19
+ axgram login
20
+
21
+ # 2. List the projects you have access to
22
+ axgram projects ls
23
+
24
+ # 3. Bind the current git repo to a project (or create a new one)
25
+ axgram projects link <project-id>
26
+ # or:
27
+ axgram projects create "My Project" && axgram projects link <new-id>
28
+
29
+ # 4. Mine your local codebase
30
+ axgram mine ./src
31
+
32
+ # 5. Import conversation history
33
+ axgram import chatgpt ~/Downloads/conversations.json
34
+ axgram import claude ~/Downloads/claude-export.json
35
+ axgram import gemini ~/Downloads/gemini-takeout.json
36
+ axgram import obsidian ~/Documents/MyVault
37
+ axgram import markdown ~/Documents/notes --wing notes
38
+ ```
39
+
40
+ ## Project resolution
41
+
42
+ Most commands need to know which Axgram project they're operating in.
43
+ Resolution chain (highest precedence first):
44
+
45
+ 1. `--project <id>` flag
46
+ 2. `AXGRAM_PROJECT_ID` environment variable
47
+ 3. Repo binding for the current git origin (`axgram projects link`)
48
+ 4. Global default (`axgram projects use <id>`)
49
+
50
+ If none of the above resolve, commands exit 1 with a clear hint. The
51
+ `axgram-hook session-start` mode emits a system-prompt nudge instructing
52
+ Claude to ask the user how to bind the current repo.
53
+
54
+ ## Claude Code hook
55
+
56
+ Add to `~/.claude/settings.json`:
57
+
58
+ ```json
59
+ {
60
+ "hooks": {
61
+ "SessionStart": [{
62
+ "matcher": "",
63
+ "hooks": [{ "type": "command", "command": "axgram-hook session-start" }]
64
+ }],
65
+ "Stop": [{
66
+ "matcher": "",
67
+ "hooks": [{
68
+ "type": "command",
69
+ "command": "axgram-hook stop --transcript ${CLAUDE_TRANSCRIPT_PATH}"
70
+ }]
71
+ }]
72
+ }
73
+ }
74
+ ```
75
+
76
+ The Stop hook counts user exchanges since the last
77
+ `axgram_memories_filed_away` MCP tool call. When the count crosses the
78
+ threshold (default 15), it exits 2 — surfacing a reminder to the model
79
+ that it's time to checkpoint memories.
80
+
81
+ ## Configuration
82
+
83
+ | Path | Purpose |
84
+ |------|---------|
85
+ | `~/.axgram/credentials.json` | Cached access + refresh tokens (mode 0600). |
86
+ | `~/.axgram/config.json` | Global default project. |
87
+ | `~/.axgram/repo-bindings.json` | Per-repo project bindings. |
88
+ | `~/.axgram/hook-state-<project>.json` | Per-project Stop-hook counter. |
89
+
90
+ Override the config directory for testing or sandboxing:
91
+
92
+ ```bash
93
+ AXGRAM_CONFIG_DIR=/tmp/axgram-test axgram whoami
94
+ ```
95
+
96
+ ## Worker URL
97
+
98
+ By default the CLI talks to the production worker at
99
+ `https://mcp.axgram.dev`. To point it at a staging/dev deployment or a
100
+ local worker, set `AXGRAM_REMOTE_URL`:
101
+
102
+ ```bash
103
+ export AXGRAM_REMOTE_URL=https://mcp-stage.axgram.dev # staging
104
+ export AXGRAM_REMOTE_URL=http://localhost:8787 # local worker
105
+ ```
106
+
107
+ Resolution order (highest precedence first):
108
+
109
+ 1. `--worker-url <url>` flag (per command)
110
+ 2. `AXGRAM_REMOTE_URL` environment variable
111
+ 3. `AXGRAM_WORKER_URL` environment variable (legacy alias; prefer `AXGRAM_REMOTE_URL`)
112
+ 4. Default — `https://mcp.axgram.dev`
113
+
114
+ ## Development
115
+
116
+ ```bash
117
+ cd cli
118
+ npm install
119
+ npm test
120
+ npm run build # → dist/
121
+ node dist/bin/axgram.js --help
122
+ ```
123
+
124
+ ## License
125
+
126
+ MIT
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Slim hook entrypoint — no commander, optimized for cold-start latency.
5
+ *
6
+ * Subcommands:
7
+ * axgram-hook stop --transcript <path> [--project <id>] [--threshold <n>]
8
+ * axgram-hook session-start [--project <id>]
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const hook_session_start_1 = require("../commands/hook-session-start");
12
+ const hook_stop_1 = require("../commands/hook-stop");
13
+ function parseArgs(argv) {
14
+ const flags = {};
15
+ let command;
16
+ let i = 0;
17
+ while (i < argv.length) {
18
+ const arg = argv[i];
19
+ if (!command && !arg.startsWith("--")) {
20
+ command = arg;
21
+ i++;
22
+ continue;
23
+ }
24
+ if (arg.startsWith("--")) {
25
+ const key = arg.slice(2);
26
+ const next = argv[i + 1];
27
+ if (next !== undefined && !next.startsWith("--")) {
28
+ flags[key] = next;
29
+ i += 2;
30
+ }
31
+ else {
32
+ flags[key] = "true";
33
+ i++;
34
+ }
35
+ continue;
36
+ }
37
+ i++;
38
+ }
39
+ return { command, flags };
40
+ }
41
+ async function main() {
42
+ const { command, flags } = parseArgs(process.argv.slice(2));
43
+ if (!command) {
44
+ process.stderr.write("axgram-hook: usage: axgram-hook <stop|session-start> [--flags]\n");
45
+ return 1;
46
+ }
47
+ if (command === "stop") {
48
+ const transcript = flags.transcript;
49
+ if (!transcript) {
50
+ process.stderr.write("axgram-hook stop: --transcript <path> is required\n");
51
+ return 1;
52
+ }
53
+ return await (0, hook_stop_1.hookStopCommand)({
54
+ transcript,
55
+ ...(flags.project ? { project: flags.project } : {}),
56
+ ...(flags.threshold ? { threshold: parseInt(flags.threshold, 10) } : {}),
57
+ ...(flags["worker-url"] ? { workerUrl: flags["worker-url"] } : {}),
58
+ });
59
+ }
60
+ if (command === "session-start") {
61
+ return await (0, hook_session_start_1.hookSessionStartCommand)({
62
+ ...(flags.project ? { project: flags.project } : {}),
63
+ });
64
+ }
65
+ process.stderr.write(`axgram-hook: unknown command "${command}"\n`);
66
+ return 1;
67
+ }
68
+ main()
69
+ .then((code) => {
70
+ if (code !== 0)
71
+ process.exit(code);
72
+ })
73
+ .catch((err) => {
74
+ process.stderr.write(`axgram-hook: ${err.message}\n`);
75
+ process.exit(1);
76
+ });
77
+ //# sourceMappingURL=axgram-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axgram-hook.js","sourceRoot":"","sources":["../../src/bin/axgram-hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,386 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const commander_1 = require("commander");
7
+ const import_1 = require("../commands/import");
8
+ const invitations_1 = require("../commands/invitations");
9
+ const login_1 = require("../commands/login");
10
+ const logout_1 = require("../commands/logout");
11
+ const members_1 = require("../commands/members");
12
+ const mine_1 = require("../commands/mine");
13
+ const orgs_1 = require("../commands/orgs");
14
+ const projects_1 = require("../commands/projects");
15
+ const teams_1 = require("../commands/teams");
16
+ const whoami_1 = require("../commands/whoami");
17
+ const remote_url_1 = require("../lib/remote-url");
18
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.resolve)(__dirname, "..", "..", "package.json"), "utf8"));
19
+ const DEFAULT_WORKER_URL = (0, remote_url_1.resolveRemoteUrl)();
20
+ const program = new commander_1.Command();
21
+ program
22
+ .name("axgram")
23
+ .description("Axgram CLI — mine codebases, import conversation history, and run Claude Code hooks.")
24
+ .version(pkg.version);
25
+ program
26
+ .command("login")
27
+ .description("Authenticate with Axgram via the worker-bridged login page.")
28
+ .option("--worker-url <url>", "Override the worker base URL (defaults to AXGRAM_REMOTE_URL or https://mcp.axgram.dev).", DEFAULT_WORKER_URL)
29
+ .action(async (opts) => {
30
+ await (0, login_1.loginCommand)({ workerUrl: opts.workerUrl });
31
+ });
32
+ program
33
+ .command("logout")
34
+ .description("Clear cached Axgram credentials from this machine.")
35
+ .action(async () => {
36
+ await (0, logout_1.logoutCommand)();
37
+ });
38
+ program
39
+ .command("whoami")
40
+ .description("Show the email + user id of the active Axgram session.")
41
+ .action(async () => {
42
+ const code = await (0, whoami_1.whoamiCommand)();
43
+ if (code !== 0)
44
+ process.exit(code);
45
+ });
46
+ const projects = program
47
+ .command("projects")
48
+ .description("Manage projects + git-repo bindings.");
49
+ projects
50
+ .command("ls")
51
+ .description("List projects you have access to.")
52
+ .action(async () => {
53
+ const code = await (0, projects_1.projectsLs)();
54
+ if (code !== 0)
55
+ process.exit(code);
56
+ });
57
+ projects
58
+ .command("use <id-or-name>")
59
+ .description("Set the global default project (~/.axgram/config.json).")
60
+ .action(async (idOrName) => {
61
+ const code = await (0, projects_1.projectsUse)(idOrName);
62
+ if (code !== 0)
63
+ process.exit(code);
64
+ });
65
+ projects
66
+ .command("clear-default")
67
+ .description("Clear the global default project from ~/.axgram/config.json.")
68
+ .action(async () => {
69
+ const code = await (0, projects_1.projectsClearDefault)();
70
+ if (code !== 0)
71
+ process.exit(code);
72
+ });
73
+ projects
74
+ .command("create <name>")
75
+ .description("Create a new project under your default team.")
76
+ .option("--description <text>", "Optional project description.")
77
+ .option("--identity <text>", "Optional identity / persona for the project.")
78
+ .option("--team <id>", "Override the team to create under.")
79
+ .action(async (name, opts) => {
80
+ const code = await (0, projects_1.projectsCreate)(name, {
81
+ ...(opts.description !== undefined ? { description: opts.description } : {}),
82
+ ...(opts.identity !== undefined ? { identity: opts.identity } : {}),
83
+ ...(opts.team !== undefined ? { teamId: opts.team } : {}),
84
+ });
85
+ if (code !== 0)
86
+ process.exit(code);
87
+ });
88
+ projects
89
+ .command("link [project_id]")
90
+ .description("Bind the current git repo (by origin URL) to a project.")
91
+ .action(async (projectId) => {
92
+ const code = await (0, projects_1.projectsLink)(projectId);
93
+ if (code !== 0)
94
+ process.exit(code);
95
+ });
96
+ projects
97
+ .command("unlink")
98
+ .description("Remove the binding for the current git repo.")
99
+ .action(async () => {
100
+ const code = await (0, projects_1.projectsUnlink)();
101
+ if (code !== 0)
102
+ process.exit(code);
103
+ });
104
+ projects
105
+ .command("current")
106
+ .description("Show the active project (flag → env → repo binding → global default).")
107
+ .option("--project <id>", "Override the resolved project id.")
108
+ .action(async (opts) => {
109
+ const code = await (0, projects_1.projectsCurrent)(opts.project);
110
+ if (code !== 0)
111
+ process.exit(code);
112
+ });
113
+ projects
114
+ .command("delete <id-or-name>")
115
+ .description("Delete a project (and its drawers/tunnels/diary/etc.). Type-to-confirm. Irreversible.")
116
+ .option("--name <exact>", "Required with --yes for non-interactive deletes.")
117
+ .option("--yes", "Skip the interactive prompt; must be combined with --name <exact>.")
118
+ .action(async (idOrName, opts) => {
119
+ const code = await (0, projects_1.projectsDelete)(idOrName, {
120
+ ...(opts.name ? { name: opts.name } : {}),
121
+ ...(opts.yes ? { yes: true } : {}),
122
+ });
123
+ if (code !== 0)
124
+ process.exit(code);
125
+ });
126
+ const orgs = program
127
+ .command("orgs")
128
+ .description("Manage organizations.");
129
+ orgs
130
+ .command("ls")
131
+ .description("List orgs you have access to.")
132
+ .action(async () => {
133
+ const code = await (0, orgs_1.orgsLs)();
134
+ if (code !== 0)
135
+ process.exit(code);
136
+ });
137
+ orgs
138
+ .command("create <name>")
139
+ .description("Create a new org with a default team. You become owner of the default team.")
140
+ .action(async (name) => {
141
+ const code = await (0, orgs_1.orgsCreate)(name);
142
+ if (code !== 0)
143
+ process.exit(code);
144
+ });
145
+ orgs
146
+ .command("rename <id-or-name> <new-name>")
147
+ .description("Rename an org. Caller must be owner of any team in the org.")
148
+ .action(async (idOrName, newName) => {
149
+ const code = await (0, orgs_1.orgsRename)(idOrName, newName);
150
+ if (code !== 0)
151
+ process.exit(code);
152
+ });
153
+ orgs
154
+ .command("delete <id-or-name>")
155
+ .description("Delete an org and ALL its teams/projects/drawers/invitations. Type-to-confirm. Irreversible.")
156
+ .option("--name <exact>", "Required with --yes for non-interactive deletes.")
157
+ .option("--yes", "Skip the interactive prompt; must be combined with --name <exact>.")
158
+ .action(async (idOrName, opts) => {
159
+ const code = await (0, orgs_1.orgsDelete)(idOrName, {
160
+ ...(opts.name ? { name: opts.name } : {}),
161
+ ...(opts.yes ? { yes: true } : {}),
162
+ });
163
+ if (code !== 0)
164
+ process.exit(code);
165
+ });
166
+ const teams = program
167
+ .command("teams")
168
+ .description("Manage teams within an org.");
169
+ teams
170
+ .command("ls")
171
+ .description("List teams under an org (or all orgs you can see).")
172
+ .option("--org <id-or-name>", "Filter by org.")
173
+ .action(async (opts) => {
174
+ const code = await (0, teams_1.teamsLs)(opts.org);
175
+ if (code !== 0)
176
+ process.exit(code);
177
+ });
178
+ teams
179
+ .command("create <name>")
180
+ .description("Create a new team. By default you become owner; pass --no-join to create a memberless team.")
181
+ .option("--org <id-or-name>", "Parent org (defaults to your first org).")
182
+ .option("--no-join", "Create the team without joining it as owner.")
183
+ .action(async (name, opts) => {
184
+ const code = await (0, teams_1.teamsCreate)(name, {
185
+ ...(opts.org ? { orgName: opts.org } : {}),
186
+ ...(opts.join === false ? { noJoin: true } : {}),
187
+ });
188
+ if (code !== 0)
189
+ process.exit(code);
190
+ });
191
+ teams
192
+ .command("delete <id-or-name>")
193
+ .description("Delete a team and ALL its projects/drawers/memberships/invitations. Type-to-confirm. Irreversible.")
194
+ .option("--name <exact>", "Required with --yes for non-interactive deletes.")
195
+ .option("--yes", "Skip the interactive prompt; must be combined with --name <exact>.")
196
+ .action(async (idOrName, opts) => {
197
+ const code = await (0, teams_1.teamsDelete)(idOrName, {
198
+ ...(opts.name ? { name: opts.name } : {}),
199
+ ...(opts.yes ? { yes: true } : {}),
200
+ });
201
+ if (code !== 0)
202
+ process.exit(code);
203
+ });
204
+ const members = program
205
+ .command("members")
206
+ .description("Manage team members (list, promote, demote, remove, leave).");
207
+ members
208
+ .command("ls")
209
+ .description("List members of a team.")
210
+ .option("--team <id-or-name>", "Team to inspect (defaults to all visible).")
211
+ .action(async (opts) => {
212
+ const code = await (0, members_1.membersLs)(opts.team);
213
+ if (code !== 0)
214
+ process.exit(code);
215
+ });
216
+ members
217
+ .command("promote <email-or-user-id>")
218
+ .description("Promote member → admin → owner.")
219
+ .requiredOption("--team <id-or-name>", "Team the member belongs to.")
220
+ .action(async (emailOrId, opts) => {
221
+ const code = await (0, members_1.membersPromote)(emailOrId, { team: opts.team });
222
+ if (code !== 0)
223
+ process.exit(code);
224
+ });
225
+ members
226
+ .command("demote <email-or-user-id>")
227
+ .description("Demote owner → admin → member. The last owner cannot be demoted.")
228
+ .requiredOption("--team <id-or-name>", "Team the member belongs to.")
229
+ .action(async (emailOrId, opts) => {
230
+ const code = await (0, members_1.membersDemote)(emailOrId, { team: opts.team });
231
+ if (code !== 0)
232
+ process.exit(code);
233
+ });
234
+ members
235
+ .command("remove <email-or-user-id>")
236
+ .description("Remove a member from a team. Owners only.")
237
+ .requiredOption("--team <id-or-name>", "Team the member belongs to.")
238
+ .option("--yes", "Skip the confirmation prompt.")
239
+ .action(async (emailOrId, opts) => {
240
+ const code = await (0, members_1.membersRemove)(emailOrId, {
241
+ team: opts.team,
242
+ ...(opts.yes ? { yes: true } : {}),
243
+ });
244
+ if (code !== 0)
245
+ process.exit(code);
246
+ });
247
+ members
248
+ .command("leave")
249
+ .description("Leave a team you're a member of. Sole-member self-leave routes to `axgram teams delete`.")
250
+ .requiredOption("--team <id-or-name>", "Team to leave.")
251
+ .option("--yes", "Skip the confirmation prompt.")
252
+ .action(async (opts) => {
253
+ const code = await (0, members_1.membersLeave)({
254
+ team: opts.team,
255
+ ...(opts.yes ? { yes: true } : {}),
256
+ });
257
+ if (code !== 0)
258
+ process.exit(code);
259
+ });
260
+ const invitations = program
261
+ .command("invitations")
262
+ .description("Manage team invitations (invite, list, revoke, accept, resend).");
263
+ invitations
264
+ .command("ls")
265
+ .description("List invitations for a team or across all teams you administer.")
266
+ .option("--team <id-or-name>", "Filter to a single team.")
267
+ .action(async (opts) => {
268
+ const code = await (0, invitations_1.invitationsLs)(opts.team);
269
+ if (code !== 0)
270
+ process.exit(code);
271
+ });
272
+ invitations
273
+ .command("invite <email>")
274
+ .description("Invite a user to a team by email. Prints an accept link to share manually until email delivery (Plan 7) ships.")
275
+ .requiredOption("--team <id-or-name>", "Target team.")
276
+ .option("--role <role>", "owner | admin | member (default member).")
277
+ .action(async (email, opts) => {
278
+ const code = await (0, invitations_1.invitationsInvite)(email, {
279
+ team: opts.team,
280
+ ...(opts.role ? { role: opts.role } : {}),
281
+ });
282
+ if (code !== 0)
283
+ process.exit(code);
284
+ });
285
+ invitations
286
+ .command("revoke <invitation-id>")
287
+ .description("Revoke a pending invitation. Owners/admins only.")
288
+ .action(async (id) => {
289
+ const code = await (0, invitations_1.invitationsRevoke)(id);
290
+ if (code !== 0)
291
+ process.exit(code);
292
+ });
293
+ invitations
294
+ .command("accept <token>")
295
+ .description("Accept an invitation token. The session's email must match the invitation.")
296
+ .action(async (token) => {
297
+ const code = await (0, invitations_1.invitationsAccept)(token);
298
+ if (code !== 0)
299
+ process.exit(code);
300
+ });
301
+ invitations
302
+ .command("resend <invitation-id>")
303
+ .description("Extend an invitation's expiry by 7 days. Owners/admins only.")
304
+ .action(async (id) => {
305
+ const code = await (0, invitations_1.invitationsResend)(id);
306
+ if (code !== 0)
307
+ process.exit(code);
308
+ });
309
+ const importGroup = program
310
+ .command("import")
311
+ .description("Ingest external conversation/note exports.");
312
+ function commonImportFlags(cmd) {
313
+ return cmd
314
+ .option("--project <id>", "Override the resolved project id.")
315
+ .option("--wing <name>", "Override the importer's default wing.")
316
+ .option("--room <name>", "Pin all chunks to this room (skips auto-detection).")
317
+ .option("--no-kg", "Skip entity extraction and axgram_kg_add writes.")
318
+ .option("--worker-url <url>", "Override the worker base URL.", DEFAULT_WORKER_URL);
319
+ }
320
+ function importOpts(opts) {
321
+ return {
322
+ ...(opts.project !== undefined ? { project: opts.project } : {}),
323
+ ...(opts.wing !== undefined ? { wing: opts.wing } : {}),
324
+ ...(opts.room !== undefined ? { room: opts.room } : {}),
325
+ noKg: opts.kg === false,
326
+ workerUrl: opts.workerUrl,
327
+ };
328
+ }
329
+ commonImportFlags(importGroup.command("chatgpt <file>").description("Import OpenAI's conversations.json (GDPR export).")).action(async (file, opts) => {
330
+ const code = await (0, import_1.importChatGpt)(file, importOpts(opts));
331
+ if (code !== 0)
332
+ process.exit(code);
333
+ });
334
+ commonImportFlags(importGroup.command("claude <file>").description("Import Claude.ai's export JSON.")).action(async (file, opts) => {
335
+ const code = await (0, import_1.importClaude)(file, importOpts(opts));
336
+ if (code !== 0)
337
+ process.exit(code);
338
+ });
339
+ commonImportFlags(importGroup.command("gemini <file>").description("Import Google Takeout's Gemini JSON.")).action(async (file, opts) => {
340
+ const code = await (0, import_1.importGemini)(file, importOpts(opts));
341
+ if (code !== 0)
342
+ process.exit(code);
343
+ });
344
+ commonImportFlags(importGroup.command("obsidian <vault>").description("Import an Obsidian vault directory.")).action(async (vault, opts) => {
345
+ const code = await (0, import_1.importObsidian)(vault, importOpts(opts));
346
+ if (code !== 0)
347
+ process.exit(code);
348
+ });
349
+ commonImportFlags(importGroup
350
+ .command("markdown <dir>")
351
+ .description("Import a directory of generic .md/.txt files. --wing is required.")).action(async (dir, opts) => {
352
+ if (!opts.wing) {
353
+ process.stderr.write("axgram import markdown requires --wing.\n");
354
+ process.exit(1);
355
+ }
356
+ const code = await (0, import_1.importMarkdown)(dir, { ...importOpts(opts), wing: opts.wing });
357
+ if (code !== 0)
358
+ process.exit(code);
359
+ });
360
+ program
361
+ .command("mine <path>")
362
+ .description("Walk a directory and ingest its files via MCP axgram_bulk_add.")
363
+ .option("--project <id>", "Override the resolved project id.")
364
+ .option("--wing <name>", "Wing name for inserted drawers (default: dirname).")
365
+ .option("--room <name>", "Pin all chunks to this room (skips auto-detection). One of: technical, architecture, planning, decisions, problems, general.")
366
+ .option("--no-kg", "Skip entity extraction and axgram_kg_add writes.")
367
+ .option("--importance <n>", "Importance value for inserted drawers (0–3).", (v) => parseFloat(v))
368
+ .option("--worker-url <url>", "Override the worker base URL (defaults to AXGRAM_REMOTE_URL or https://mcp.axgram.dev).", DEFAULT_WORKER_URL)
369
+ .action(async (path, opts) => {
370
+ const code = await (0, mine_1.mineCommand)({
371
+ path,
372
+ ...(opts.project !== undefined ? { project: opts.project } : {}),
373
+ ...(opts.wing !== undefined ? { wing: opts.wing } : {}),
374
+ ...(opts.room !== undefined ? { room: opts.room } : {}),
375
+ noKg: opts.kg === false,
376
+ ...(opts.importance !== undefined ? { importance: opts.importance } : {}),
377
+ workerUrl: opts.workerUrl,
378
+ });
379
+ if (code !== 0)
380
+ process.exit(code);
381
+ });
382
+ program.parseAsync(process.argv).catch((err) => {
383
+ console.error(err);
384
+ process.exit(1);
385
+ });
386
+ //# sourceMappingURL=axgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axgram.js","sourceRoot":"","sources":["../../src/bin/axgram.ts"],"names":[],"mappings":"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"}