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.
- package/README.md +126 -0
- package/dist/bin/axgram-hook.js +77 -0
- package/dist/bin/axgram-hook.js.map +1 -0
- package/dist/bin/axgram.js +386 -0
- package/dist/bin/axgram.js.map +1 -0
- package/dist/commands/hook-session-start.js +85 -0
- package/dist/commands/hook-session-start.js.map +1 -0
- package/dist/commands/hook-stop.js +73 -0
- package/dist/commands/hook-stop.js.map +1 -0
- package/dist/commands/import.js +56 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/invitations.js +153 -0
- package/dist/commands/invitations.js.map +1 -0
- package/dist/commands/login.js +125 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +11 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/members.js +231 -0
- package/dist/commands/members.js.map +1 -0
- package/dist/commands/mine.js +78 -0
- package/dist/commands/mine.js.map +1 -0
- package/dist/commands/orgs.js +153 -0
- package/dist/commands/orgs.js.map +1 -0
- package/dist/commands/projects.js +285 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/teams.js +153 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/whoami.js +27 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/lib/auth.js +128 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/chunkers/exchange-pair.js +51 -0
- package/dist/lib/chunkers/exchange-pair.js.map +1 -0
- package/dist/lib/chunkers/index.js +74 -0
- package/dist/lib/chunkers/index.js.map +1 -0
- package/dist/lib/chunkers/line-group.js +20 -0
- package/dist/lib/chunkers/line-group.js.map +1 -0
- package/dist/lib/chunkers/paragraph.js +29 -0
- package/dist/lib/chunkers/paragraph.js.map +1 -0
- package/dist/lib/chunkers/types.js +3 -0
- package/dist/lib/chunkers/types.js.map +1 -0
- package/dist/lib/config-dir.js +30 -0
- package/dist/lib/config-dir.js.map +1 -0
- package/dist/lib/destructive-confirm.js +71 -0
- package/dist/lib/destructive-confirm.js.map +1 -0
- package/dist/lib/entity-extractor.js +182 -0
- package/dist/lib/entity-extractor.js.map +1 -0
- package/dist/lib/global-config.js +42 -0
- package/dist/lib/global-config.js.map +1 -0
- package/dist/lib/hook-settings.js +87 -0
- package/dist/lib/hook-settings.js.map +1 -0
- package/dist/lib/hook-state.js +38 -0
- package/dist/lib/hook-state.js.map +1 -0
- package/dist/lib/importers/chatgpt.js +89 -0
- package/dist/lib/importers/chatgpt.js.map +1 -0
- package/dist/lib/importers/claude.js +47 -0
- package/dist/lib/importers/claude.js.map +1 -0
- package/dist/lib/importers/gemini.js +38 -0
- package/dist/lib/importers/gemini.js.map +1 -0
- package/dist/lib/importers/markdown.js +47 -0
- package/dist/lib/importers/markdown.js.map +1 -0
- package/dist/lib/importers/obsidian.js +62 -0
- package/dist/lib/importers/obsidian.js.map +1 -0
- package/dist/lib/importers/run.js +51 -0
- package/dist/lib/importers/run.js.map +1 -0
- package/dist/lib/ingest.js +101 -0
- package/dist/lib/ingest.js.map +1 -0
- package/dist/lib/mcp-client.js +56 -0
- package/dist/lib/mcp-client.js.map +1 -0
- package/dist/lib/project-resolver.js +42 -0
- package/dist/lib/project-resolver.js.map +1 -0
- package/dist/lib/remote-url.js +23 -0
- package/dist/lib/remote-url.js.map +1 -0
- package/dist/lib/repo-bindings.js +52 -0
- package/dist/lib/repo-bindings.js.map +1 -0
- package/dist/lib/repo.js +72 -0
- package/dist/lib/repo.js.map +1 -0
- package/dist/lib/room-detector.js +99 -0
- package/dist/lib/room-detector.js.map +1 -0
- package/dist/lib/slugify.js +17 -0
- package/dist/lib/slugify.js.map +1 -0
- package/dist/lib/supabase-client.js +35 -0
- package/dist/lib/supabase-client.js.map +1 -0
- package/dist/lib/tool-vocab.js +114 -0
- package/dist/lib/tool-vocab.js.map +1 -0
- package/dist/lib/transcript.js +68 -0
- package/dist/lib/transcript.js.map +1 -0
- package/dist/lib/walker.js +81 -0
- package/dist/lib/walker.js.map +1 -0
- 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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"}
|