@aitne-sh/aitne 0.1.4 → 0.1.6
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 +16 -0
- package/agent-assets/agent-profiles/_safety.md +29 -0
- package/agent-assets/agent-profiles/routine-fetch-window.md +75 -40
- package/agent-assets/agent-profiles/wiki-agent.md +19 -0
- package/agent-assets/docs/features/messaging/bang-commands.md +161 -0
- package/agent-assets/docs/features/messaging/overview.md +3 -0
- package/agent-assets/docs/features/wiki/commands.md +222 -0
- package/agent-assets/docs/features/wiki/overview.md +145 -0
- package/agent-assets/docs/getting-started/03-what-can-this-do.md +18 -0
- package/agent-assets/docs/glossary.md +34 -0
- package/agent-assets/docs/guides/budget-and-cost-for-wiki.md +123 -0
- package/agent-assets/docs/guides/build-your-wiki.md +99 -0
- package/agent-assets/docs/guides/explore-with-trace-and-connect.md +169 -0
- package/agent-assets/docs/guides/maintain-wiki-health.md +168 -0
- package/agent-assets/docs/guides/multiple-wikis-for-multiple-domains.md +192 -0
- package/agent-assets/docs/guides/pause-the-agent.md +10 -3
- package/agent-assets/docs/guides/use-an-existing-obsidian-vault.md +156 -0
- package/agent-assets/docs/reference/cli-commands.md +24 -1
- package/agent-assets/docs/troubleshooting/wiki-ingest-full-blocked.md +96 -0
- package/agent-assets/docs/troubleshooting/wiki-write-failed.md +82 -0
- package/agent-assets/skills/context/SKILL.md +288 -17
- package/agent-assets/skills/external-services/SKILL.delegated.claude.md +2 -2
- package/agent-assets/skills/external-services/SKILL.delegated.codex.md +3 -3
- package/agent-assets/skills/external-services/SKILL.delegated.gemini.md +6 -6
- package/agent-assets/skills/external-services/SKILL.md +5 -3
- package/agent-assets/skills/external-services/SKILL.native.claude.md +49 -58
- package/agent-assets/skills/external-services/SKILL.native.codex.md +50 -58
- package/agent-assets/skills/external-services/SKILL.native.gemini.md +53 -56
- package/agent-assets/skills/mail/SKILL.md +5 -5
- package/agent-assets/skills/mail/SKILL.native.claude.md +57 -65
- package/agent-assets/skills/mail/SKILL.native.codex.md +73 -75
- package/agent-assets/skills/mail/SKILL.native.gemini.md +80 -75
- package/agent-assets/skills/management-task-register/SKILL.md +3 -3
- package/agent-assets/skills/notion/SKILL.native.claude.md +78 -82
- package/agent-assets/skills/notion/SKILL.native.codex.md +78 -80
- package/agent-assets/skills/notion/SKILL.native.gemini.md +91 -90
- package/agent-assets/skills/observations/SKILL.md +123 -15
- package/agent-assets/skills/roadmap/SKILL.md +31 -4
- package/agent-assets/skills/schedule/SKILL.md +44 -3
- package/agent-assets/skills/today/SKILL.md +50 -11
- package/agent-assets/skills/travel-time/SKILL.md +9 -0
- package/agent-assets/skills/wiki/wiki-ask/SKILL.md +32 -0
- package/agent-assets/skills/wiki/wiki-compile/SKILL.md +126 -0
- package/agent-assets/skills/wiki/wiki-connect/SKILL.md +75 -0
- package/agent-assets/skills/wiki/wiki-graduate/SKILL.md +45 -0
- package/agent-assets/skills/wiki/wiki-ingest/SKILL.md +182 -0
- package/agent-assets/skills/wiki/wiki-lint/SKILL.md +90 -0
- package/agent-assets/skills/wiki/wiki-trace/SKILL.md +72 -0
- package/agent-assets/skills/wiki/wiki-vault-rules/SKILL.md +145 -0
- package/agent-assets/task-flows/_partials/calendar-acquire.google_calendar.md +28 -9
- package/agent-assets/task-flows/_partials/calendar-acquire.outlook_calendar.md +26 -9
- package/agent-assets/task-flows/_partials/mail-acquire.gmail.md +51 -24
- package/agent-assets/task-flows/_partials/mail-acquire.outlook_mail.md +46 -16
- package/agent-assets/task-flows/_partials/notion-acquire.notion.md +29 -9
- package/agent-assets/task-flows/message.received.dm.md +35 -2
- package/agent-assets/task-flows/message.received.dm.native.claude.md +25 -26
- package/agent-assets/task-flows/message.received.dm.native.codex.md +30 -24
- package/agent-assets/task-flows/message.received.dm.native.gemini.md +36 -36
- package/agent-assets/task-flows/message.received.dm_first.md +43 -4
- package/agent-assets/task-flows/message.received.dm_first.native.claude.md +20 -20
- package/agent-assets/task-flows/message.received.dm_first.native.codex.md +22 -19
- package/agent-assets/task-flows/message.received.dm_first.native.gemini.md +28 -24
- package/agent-assets/task-flows/routine.fetch_window.md +51 -36
- package/agent-assets/task-flows/routine.morning_routine.md +12 -3
- package/agent-assets/task-flows/routine.morning_routine_initial.md +22 -1
- package/agent-assets/task-flows/routine.roadmap_refresh.md +7 -3
- package/agent-assets/task-flows/scheduled.dm.md +477 -0
- package/agent-assets/task-flows/setup.initial.md +50 -23
- package/agent-assets/task-flows/wiki.ask.md +11 -0
- package/agent-assets/task-flows/wiki.compile.md +28 -0
- package/agent-assets/task-flows/wiki.connect.md +12 -0
- package/agent-assets/task-flows/wiki.ingest_url.md +35 -0
- package/agent-assets/task-flows/wiki.lint.md +13 -0
- package/agent-assets/task-flows/wiki.trace.md +13 -0
- package/agent-assets/wiki-seeds/schemas/output.md +12 -0
- package/agent-assets/wiki-seeds/schemas/raw.md +13 -0
- package/agent-assets/wiki-seeds/schemas/wiki.md +12 -0
- package/agent-assets/wiki-seeds/taxonomy.md +13 -0
- package/package.json +10 -6
- package/scripts/check-redaction-coverage.mjs +0 -109
- package/scripts/commands.md +0 -0
- package/scripts/message-discipline-digest.mjs +0 -535
- package/scripts/poc/google-connector-inheritance/REPORT.md +0 -197
- package/scripts/poc/google-connector-inheritance/claude-sdk-probe.mjs +0 -79
- package/scripts/regen-skill-fixtures.mjs +0 -39
- package/scripts/remint-roadmap-ids.mjs +0 -257
- package/scripts/smoke-obsidian-api.mjs +0 -166
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{context}
|
|
2
|
+
|
|
3
|
+
## Task: Bridge two domains in the wiki
|
|
4
|
+
|
|
5
|
+
Read `<wiki_command>` for `topic_a` and `topic_b`. Follow the `wiki-connect` skill:
|
|
6
|
+
|
|
7
|
+
1. Search each topic independently and read enough matches to characterise each domain. Disambiguate string matches against `90_meta/taxonomy.md`.
|
|
8
|
+
2. Surface bridges in four buckets — shared terminology, common references, structural analogies, and bridging concept candidates. Cite every bridge with at least one wiki path from each side. A bridge that can only cite one side belongs in the candidates list, not in the others.
|
|
9
|
+
3. Write one connection report to `30_outputs/<YYYY-MM-DD>-connect-<slug-a>--<slug-b>.md` through the Wiki API with `x-process-key: wiki.connect`. Use the canonical slugs from `90_meta/taxonomy.md` when available.
|
|
10
|
+
4. Append a one-line `log.md` entry referencing the output filename and both topics.
|
|
11
|
+
|
|
12
|
+
If no real bridges exist, write the report anyway with empty sections marked `_(none)_` and a `## Summary` that names that directly — a "no connection" finding is still useful. Do not create new wiki notes from this flow; the bridging concept candidates section is a proposal for `wiki.compile` to pick up later. End with a short internal summary only.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{context}
|
|
2
|
+
|
|
3
|
+
## Task: Ingest URL into the wiki
|
|
4
|
+
|
|
5
|
+
A single `!ingest` call landed here. Read `<wiki_command>` for the target `url` and `<wiki_workspace>` for the destination workspace.
|
|
6
|
+
|
|
7
|
+
You succeed if and only if you POST a new file to `/api/wiki/<workspace>/files/10_raw/<slug>.md` and the daemon responds with `{"ok":true,"path":"10_raw/<slug>.md"}`. There is no other definition of success. The vault file is created by that POST and nothing else — `Write` tool / shell redirection / other endpoints do not put a file in the vault.
|
|
8
|
+
|
|
9
|
+
### Critical: the Bash command MUST start with literal `curl`
|
|
10
|
+
|
|
11
|
+
The `Bash(curl *)` allow-list is prefix-matched. Wrappers (`echo '{...}' | curl …`, `cat <<JSON | curl … -d @-`, `bash -c "curl …"`, parentheses, chained `curl … ; curl …`) are silently denied under `dontAsk` — you get no error, no `PA_API_ERROR`, just an empty response. If a Bash call returns nothing, rewrite it to start with `curl`.
|
|
12
|
+
|
|
13
|
+
Article bodies are typically multi-KB — use a heredoc redirected directly into curl (the command still starts with `curl`):
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
curl http://localhost:8321/api/wiki/<workspace>/files/10_raw/<slug>.md \
|
|
17
|
+
-X POST \
|
|
18
|
+
-H 'content-type: application/json' \
|
|
19
|
+
-H 'x-process-key: wiki.ingest_url' \
|
|
20
|
+
-d @- <<'JSON'
|
|
21
|
+
{"content":"---\n…frontmatter…\n---\n\n# Title\n\n## Source extracts\n\n…"}
|
|
22
|
+
JSON
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The shim reads stdin when `-d @-` is passed, so the heredoc body lands as the JSON payload. Inside `<<'JSON'` (single-quoted marker) the body is verbatim — no shell escaping, only JSON escapes (`\"`, `\\`, `\n`). For short bodies (a few hundred bytes) inline `-d '<json>'` is fine.
|
|
26
|
+
|
|
27
|
+
### Procedure
|
|
28
|
+
|
|
29
|
+
1. Fetch the URL with the per-backend primitive (WebFetch on Claude, curl on Codex, web_fetch on Gemini).
|
|
30
|
+
2. POST one new note at `10_raw/<slug>.md` via the daemon Wiki API with `-H 'x-process-key: wiki.ingest_url'`. Path is EXACTLY `10_raw/<slug>.md` — no nested folders like `10_raw/articles/...`.
|
|
31
|
+
3. **Inspect the curl response.** Only `{"ok":true,"path":"10_raw/<slug>.md"}` counts as success. Anything else (4xx, 5xx, missing fields, hallucinated endpoint like `/api/send-message`, no response) means the file was NOT created — PATCH `log.md` with the failure reason and emit the failure DM.
|
|
32
|
+
|
|
33
|
+
The `wiki-ingest` skill carries the full curl shapes, slug rules, error-code recovery table, and completion-DM format.
|
|
34
|
+
|
|
35
|
+
End the turn with the single-line completion DM defined in the skill. The path you cite in the success DM must be byte-identical to the `path` field the daemon returned. Do not fabricate a path. Do not claim success without seeing `{"ok":true,...}`. The daemon forwards your final assistant text to the user — you must NOT also call `/api/send-message`, `/api/whatsapp/send`, `/api/notify-user`, `/api/dm`, or any other "send" endpoint; those do not exist.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{context}
|
|
2
|
+
|
|
3
|
+
## Task: Audit wiki health
|
|
4
|
+
|
|
5
|
+
Read `<wiki_command>` for the target workspace. Follow the `wiki-lint` skill:
|
|
6
|
+
|
|
7
|
+
1. Inventory the workspace via `GET /api/wiki/{{workspace_name}}/index` and read `90_meta/schemas/*` for the current schema.
|
|
8
|
+
2. Run every check the skill enumerates (orphans, broken wikilinks, missing frontmatter, stale content, term inconsistencies, taxonomy candidates, index drift). Empty findings are still reported.
|
|
9
|
+
3. Write exactly one health report to `90_meta/health/<YYYY-MM-DD>.md` through the Wiki API with `x-process-key: wiki.lint`. The report must include the `## Action items` and `## Summary` sections in the exact order documented by the skill.
|
|
10
|
+
4. If — and only if — there are taxonomy candidates, append a `# Candidates` section to `90_meta/taxonomy.md` with `mode: "append"`. The owner reviews this before any promotion happens; do not edit the existing `## Topics` section.
|
|
11
|
+
5. Append a concise summary line to `log.md`.
|
|
12
|
+
|
|
13
|
+
Do not modify content layers (`10_raw/`, `20_wiki/`, `30_outputs/`). End with a short internal summary only.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{context}
|
|
2
|
+
|
|
3
|
+
## Task: Trace an idea's evolution across the wiki
|
|
4
|
+
|
|
5
|
+
Read `<wiki_command>` for the `topic`. Follow the `wiki-trace` skill:
|
|
6
|
+
|
|
7
|
+
1. Search across all layers (`10_raw/`, `20_wiki/`, `30_outputs/`) and read the matches that look load-bearing. Use `90_meta/taxonomy.md` to canonicalise the topic slug.
|
|
8
|
+
2. Order findings chronologically using the most authoritative date available (asserted dates → output filename dates → file `mtime`). Mark any date that came from `mtime` as "discovered on" rather than "happened on".
|
|
9
|
+
3. Group into two to five phases of stable framing. For each phase, name the dominant question, the new evidence, and what changed compared to the previous phase. Cite every claim with a wiki path.
|
|
10
|
+
4. Write one timeline report to `30_outputs/<YYYY-MM-DD>-trace-<slug>.md` through the Wiki API with `x-process-key: wiki.trace`. Follow the section order documented by the skill.
|
|
11
|
+
5. Append a one-line `log.md` entry referencing the output filename and the topic.
|
|
12
|
+
|
|
13
|
+
If the wiki has fewer than two distinct sources on the topic, keep the report short and say so directly in `## Summary` — do not pad it with speculation. End with a short internal summary only.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Raw Note Schema
|
|
2
|
+
|
|
3
|
+
Raw notes live under `10_raw/` and preserve source facts before synthesis.
|
|
4
|
+
|
|
5
|
+
## Required Shape
|
|
6
|
+
|
|
7
|
+
- Source URL
|
|
8
|
+
- Retrieved timestamp
|
|
9
|
+
- Source title when available
|
|
10
|
+
- Extracted facts
|
|
11
|
+
- Quotes or snippets only when they are short and necessary
|
|
12
|
+
- Open questions
|
|
13
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Wiki Taxonomy
|
|
2
|
+
|
|
3
|
+
This file defines canonical topic names, aliases, merge rules, and review notes for the internal wiki workspace.
|
|
4
|
+
|
|
5
|
+
## Topics
|
|
6
|
+
|
|
7
|
+
- Add canonical topics as `wiki.compile` discovers stable subjects.
|
|
8
|
+
|
|
9
|
+
## Merge Rules
|
|
10
|
+
|
|
11
|
+
- Prefer preserving source attribution over collapsing similar claims too aggressively.
|
|
12
|
+
- Keep ambiguous or conflicting facts visible until a later compile pass resolves them.
|
|
13
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aitne-sh/aitne",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Aitne — a local-first, proactive personal AI agent. A long-running TypeScript daemon is the nervous system; Claude Code (or Codex / Gemini CLI) is the brain. All persistent memory lives in local Markdown files.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -31,16 +31,21 @@
|
|
|
31
31
|
},
|
|
32
32
|
"files": [
|
|
33
33
|
"bin",
|
|
34
|
-
"scripts",
|
|
35
34
|
"personal-agent.mjs",
|
|
36
35
|
"agent-assets",
|
|
36
|
+
"scripts/start.mjs",
|
|
37
|
+
"scripts/run-node.mjs",
|
|
38
|
+
"scripts/browser.mjs",
|
|
39
|
+
"scripts/rm-paths.mjs",
|
|
40
|
+
"scripts/lib/",
|
|
41
|
+
"scripts/commands/*.mjs",
|
|
37
42
|
"LICENSE",
|
|
38
43
|
"README.md"
|
|
39
44
|
],
|
|
40
45
|
"dependencies": {
|
|
41
|
-
"@aitne/daemon": "0.1.
|
|
42
|
-
"@aitne/dashboard": "0.1.
|
|
43
|
-
"@aitne/shared": "0.1.
|
|
46
|
+
"@aitne/daemon": "0.1.6",
|
|
47
|
+
"@aitne/dashboard": "0.1.6",
|
|
48
|
+
"@aitne/shared": "0.1.6"
|
|
44
49
|
},
|
|
45
50
|
"devDependencies": {
|
|
46
51
|
"@typescript-eslint/eslint-plugin": "^8.58.1",
|
|
@@ -62,7 +67,6 @@
|
|
|
62
67
|
"build": "turbo run build",
|
|
63
68
|
"start": "node bin/aitne.mjs start",
|
|
64
69
|
"stop": "node bin/aitne.mjs stop",
|
|
65
|
-
"restart": "node bin/aitne.mjs restart",
|
|
66
70
|
"status": "node bin/aitne.mjs status",
|
|
67
71
|
"logs": "node bin/aitne.mjs logs",
|
|
68
72
|
"dev": "node bin/aitne.mjs dev",
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Roadmap §2.5 / §9.2 — redaction static guard.
|
|
3
|
-
//
|
|
4
|
-
// Fails (exit 1) if any production source file outside the single
|
|
5
|
-
// permitted module (`auth-health-monitor.ts`) contains a raw SQL
|
|
6
|
-
// assignment to `auth_detail` or `last_error`. The permitted module
|
|
7
|
-
// owns the `writeAuthFailureDetail` / `writeAuthOkDetail` helpers,
|
|
8
|
-
// which apply `redactSensitiveString` unconditionally — every other
|
|
9
|
-
// caller is required to go through them.
|
|
10
|
-
//
|
|
11
|
-
// Exemptions:
|
|
12
|
-
// - test files (*.test.ts) — they seed raw fixtures, not
|
|
13
|
-
// production writes
|
|
14
|
-
// - `auth-health-monitor.ts` — the helpers themselves
|
|
15
|
-
//
|
|
16
|
-
// A match prints file:line:matching-line and exits non-zero. The full
|
|
17
|
-
// scan runs in well under a second; it is intended to be wired into
|
|
18
|
-
// `pnpm test`'s preamble (or a CI step) so that a new offending write
|
|
19
|
-
// cannot silently land alongside a green test suite.
|
|
20
|
-
|
|
21
|
-
import { execFileSync } from "node:child_process";
|
|
22
|
-
import { fileURLToPath } from "node:url";
|
|
23
|
-
import { dirname, relative, resolve } from "node:path";
|
|
24
|
-
import { existsSync } from "node:fs";
|
|
25
|
-
|
|
26
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
27
|
-
const root = resolve(here, "..");
|
|
28
|
-
const searchRoot = resolve(root, "packages/daemon/src");
|
|
29
|
-
|
|
30
|
-
if (!existsSync(searchRoot)) {
|
|
31
|
-
console.error(`check-redaction-coverage: ${searchRoot} does not exist`);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Pattern matches any assignment target `auth_detail =` or
|
|
36
|
-
// `last_error =`, regardless of placeholder style (`?` / `@name` /
|
|
37
|
-
// `:name` / `NULL` / literal). The rg -P flag uses PCRE so we can
|
|
38
|
-
// write a single union.
|
|
39
|
-
const PATTERN = String.raw`(auth_detail|last_error)\s*=`;
|
|
40
|
-
|
|
41
|
-
const EXEMPT_PATHS = new Set([
|
|
42
|
-
"packages/daemon/src/core/backends/auth-health-monitor.ts",
|
|
43
|
-
// `mail_accounts.last_error` is a separate column from the `backends`
|
|
44
|
-
// table's `last_error` that the redaction helpers guard. The redaction
|
|
45
|
-
// helper enforces scrubbing of model-auth detail strings; mail-poll
|
|
46
|
-
// errors are IMAP/Graph status messages that never carry secrets
|
|
47
|
-
// (credentials live in the encrypted blob store and are never inlined
|
|
48
|
-
// into error text — see mail-poller.ts `handlePollError`).
|
|
49
|
-
"packages/daemon/src/services/mail/account-registry.ts",
|
|
50
|
-
]);
|
|
51
|
-
|
|
52
|
-
let rgOutput = "";
|
|
53
|
-
try {
|
|
54
|
-
rgOutput = execFileSync(
|
|
55
|
-
"rg",
|
|
56
|
-
[
|
|
57
|
-
"--no-heading",
|
|
58
|
-
"--line-number",
|
|
59
|
-
"--with-filename",
|
|
60
|
-
"--glob",
|
|
61
|
-
"!**/*.test.ts",
|
|
62
|
-
"--glob",
|
|
63
|
-
"!**/*.d.ts",
|
|
64
|
-
"-e",
|
|
65
|
-
PATTERN,
|
|
66
|
-
searchRoot,
|
|
67
|
-
],
|
|
68
|
-
{ encoding: "utf8" },
|
|
69
|
-
);
|
|
70
|
-
} catch (err) {
|
|
71
|
-
// rg exits 1 when there are zero matches — that is the success case.
|
|
72
|
-
if (err.status === 1 && !err.stdout) {
|
|
73
|
-
process.exit(0);
|
|
74
|
-
}
|
|
75
|
-
// rg exits 2 on actual errors. Surface them.
|
|
76
|
-
console.error("check-redaction-coverage: rg failed");
|
|
77
|
-
console.error(err.stderr?.toString() ?? err.message);
|
|
78
|
-
process.exit(2);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const lines = rgOutput.split("\n").filter((line) => line.length > 0);
|
|
82
|
-
const offenders = [];
|
|
83
|
-
for (const line of lines) {
|
|
84
|
-
// Each rg line is `absolute-path:line:content`. Convert to a repo
|
|
85
|
-
// relative path so the exemption check is stable.
|
|
86
|
-
const firstColon = line.indexOf(":");
|
|
87
|
-
const secondColon = line.indexOf(":", firstColon + 1);
|
|
88
|
-
if (firstColon < 0 || secondColon < 0) continue;
|
|
89
|
-
const absPath = line.slice(0, firstColon);
|
|
90
|
-
const relPath = relative(root, absPath).replace(/\\/g, "/");
|
|
91
|
-
if (EXEMPT_PATHS.has(relPath)) continue;
|
|
92
|
-
offenders.push(`${relPath}:${line.slice(firstColon + 1)}`);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (offenders.length > 0) {
|
|
96
|
-
console.error(
|
|
97
|
-
"check-redaction-coverage: found raw auth_detail / last_error writes outside the helper module.",
|
|
98
|
-
);
|
|
99
|
-
console.error(
|
|
100
|
-
"All writes must go through writeAuthFailureDetail / writeAuthOkDetail in packages/daemon/src/core/backends/auth-health-monitor.ts (roadmap §9.2).",
|
|
101
|
-
);
|
|
102
|
-
console.error("");
|
|
103
|
-
for (const line of offenders) {
|
|
104
|
-
console.error(` ${line}`);
|
|
105
|
-
}
|
|
106
|
-
process.exit(1);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
process.exit(0);
|
package/scripts/commands.md
DELETED
|
File without changes
|