@agent-native/core 0.4.1 → 0.4.2
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 +31 -0
- package/dist/adapters/convex/adapter.d.ts +24 -0
- package/dist/adapters/convex/adapter.d.ts.map +1 -0
- package/dist/adapters/convex/adapter.js +125 -0
- package/dist/adapters/convex/adapter.js.map +1 -0
- package/dist/adapters/convex/index.d.ts +4 -0
- package/dist/adapters/convex/index.d.ts.map +1 -0
- package/dist/adapters/convex/index.js +3 -0
- package/dist/adapters/convex/index.js.map +1 -0
- package/dist/adapters/drizzle/adapter.d.ts +36 -0
- package/dist/adapters/drizzle/adapter.d.ts.map +1 -0
- package/dist/adapters/drizzle/adapter.js +210 -0
- package/dist/adapters/drizzle/adapter.js.map +1 -0
- package/dist/adapters/drizzle/index.d.ts +3 -0
- package/dist/adapters/drizzle/index.d.ts.map +1 -0
- package/dist/adapters/drizzle/index.js +3 -0
- package/dist/adapters/drizzle/index.js.map +1 -0
- package/dist/adapters/drizzle/schema.d.ts +146 -0
- package/dist/adapters/drizzle/schema.d.ts.map +1 -0
- package/dist/adapters/drizzle/schema.js +20 -0
- package/dist/adapters/drizzle/schema.js.map +1 -0
- package/dist/adapters/firestore/adapter.d.ts +3 -2
- package/dist/adapters/firestore/adapter.d.ts.map +1 -1
- package/dist/adapters/firestore/adapter.js +23 -6
- package/dist/adapters/firestore/adapter.js.map +1 -1
- package/dist/adapters/supabase/adapter.d.ts +2 -1
- package/dist/adapters/supabase/adapter.d.ts.map +1 -1
- package/dist/adapters/supabase/adapter.js +4 -1
- package/dist/adapters/supabase/adapter.js.map +1 -1
- package/dist/adapters/sync/config.d.ts +22 -2
- package/dist/adapters/sync/config.d.ts.map +1 -1
- package/dist/adapters/sync/config.js +175 -16
- package/dist/adapters/sync/config.js.map +1 -1
- package/dist/adapters/sync/create-file-sync.d.ts +32 -0
- package/dist/adapters/sync/create-file-sync.d.ts.map +1 -0
- package/dist/adapters/sync/create-file-sync.js +218 -0
- package/dist/adapters/sync/create-file-sync.js.map +1 -0
- package/dist/adapters/sync/file-sync.d.ts +40 -6
- package/dist/adapters/sync/file-sync.d.ts.map +1 -1
- package/dist/adapters/sync/file-sync.js +442 -97
- package/dist/adapters/sync/file-sync.js.map +1 -1
- package/dist/adapters/sync/index.d.ts +3 -2
- package/dist/adapters/sync/index.d.ts.map +1 -1
- package/dist/adapters/sync/index.js +3 -1
- package/dist/adapters/sync/index.js.map +1 -1
- package/dist/adapters/sync/merge.js +3 -2
- package/dist/adapters/sync/merge.js.map +1 -1
- package/dist/adapters/sync/types.d.ts +36 -2
- package/dist/adapters/sync/types.d.ts.map +1 -1
- package/dist/adapters/sync/types.js +22 -1
- package/dist/adapters/sync/types.js.map +1 -1
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +2 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/production-agent.d.ts +16 -0
- package/dist/agent/production-agent.d.ts.map +1 -0
- package/dist/agent/production-agent.js +152 -0
- package/dist/agent/production-agent.js.map +1 -0
- package/dist/agent/types.d.ts +38 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +2 -0
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/index.js +37 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts +14 -0
- package/dist/client/PoweredByBadge.d.ts.map +1 -0
- package/dist/client/PoweredByBadge.js +60 -0
- package/dist/client/PoweredByBadge.js.map +1 -0
- package/dist/client/ProductionAgentPanel.d.ts +10 -0
- package/dist/client/ProductionAgentPanel.d.ts.map +1 -0
- package/dist/client/ProductionAgentPanel.js +121 -0
- package/dist/client/ProductionAgentPanel.js.map +1 -0
- package/dist/client/Turnstile.d.ts +35 -0
- package/dist/client/Turnstile.d.ts.map +1 -0
- package/dist/client/Turnstile.js +77 -0
- package/dist/client/Turnstile.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/use-file-sync-status.d.ts +21 -0
- package/dist/client/use-file-sync-status.d.ts.map +1 -0
- package/dist/client/use-file-sync-status.js +65 -0
- package/dist/client/use-file-sync-status.js.map +1 -0
- package/dist/client/use-session.d.ts +16 -0
- package/dist/client/use-session.d.ts.map +1 -0
- package/dist/client/use-session.js +49 -0
- package/dist/client/use-session.js.map +1 -0
- package/dist/client/useProductionAgent.d.ts +18 -0
- package/dist/client/useProductionAgent.d.ts.map +1 -0
- package/dist/client/useProductionAgent.js +135 -0
- package/dist/client/useProductionAgent.js.map +1 -0
- package/dist/db/index.d.ts +21 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +17 -0
- package/dist/db/index.js.map +1 -0
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +5 -0
- package/dist/router/index.js.map +1 -0
- package/dist/scripts/core-scripts.d.ts +10 -0
- package/dist/scripts/core-scripts.d.ts.map +1 -0
- package/dist/scripts/core-scripts.js +15 -0
- package/dist/scripts/core-scripts.js.map +1 -0
- package/dist/scripts/db/exec.d.ts +11 -0
- package/dist/scripts/db/exec.d.ts.map +1 -0
- package/dist/scripts/db/exec.js +86 -0
- package/dist/scripts/db/exec.js.map +1 -0
- package/dist/scripts/db/index.d.ts +2 -0
- package/dist/scripts/db/index.d.ts.map +1 -0
- package/dist/scripts/db/index.js +6 -0
- package/dist/scripts/db/index.js.map +1 -0
- package/dist/scripts/db/query.d.ts +10 -0
- package/dist/scripts/db/query.d.ts.map +1 -0
- package/dist/scripts/db/query.js +96 -0
- package/dist/scripts/db/query.js.map +1 -0
- package/dist/scripts/db/schema.d.ts +12 -0
- package/dist/scripts/db/schema.d.ts.map +1 -0
- package/dist/scripts/db/schema.js +112 -0
- package/dist/scripts/db/schema.js.map +1 -0
- package/dist/scripts/index.d.ts +4 -0
- package/dist/scripts/index.d.ts.map +1 -1
- package/dist/scripts/index.js +4 -0
- package/dist/scripts/index.js.map +1 -1
- package/dist/scripts/runner.d.ts +3 -0
- package/dist/scripts/runner.d.ts.map +1 -1
- package/dist/scripts/runner.js +53 -14
- package/dist/scripts/runner.js.map +1 -1
- package/dist/server/auth.d.ts +59 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +442 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/captcha.d.ts +12 -0
- package/dist/server/captcha.d.ts.map +1 -0
- package/dist/server/captcha.js +43 -0
- package/dist/server/captcha.js.map +1 -0
- package/dist/server/create-server.d.ts +13 -10
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +41 -27
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/index.d.ts +5 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +6 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/missing-key.d.ts +9 -5
- package/dist/server/missing-key.d.ts.map +1 -1
- package/dist/server/missing-key.js +12 -7
- package/dist/server/missing-key.js.map +1 -1
- package/dist/server/sse.d.ts +12 -7
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +79 -15
- package/dist/server/sse.js.map +1 -1
- package/dist/vite/client.d.ts +28 -5
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +36 -15
- package/dist/vite/client.js.map +1 -1
- package/dist/vite/dev-api-server.d.ts +10 -0
- package/dist/vite/dev-api-server.d.ts.map +1 -0
- package/dist/vite/dev-api-server.js +148 -0
- package/dist/vite/dev-api-server.js.map +1 -0
- package/dist/vite/index.d.ts +2 -3
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +2 -3
- package/dist/vite/index.js.map +1 -1
- package/package.json +26 -17
- package/src/templates/default/AGENTS.md +148 -22
- package/src/templates/default/_gitignore +9 -5
- package/src/templates/default/client/entry.client.tsx +4 -0
- package/src/templates/default/client/entry.server.tsx +55 -0
- package/src/templates/default/client/root.tsx +82 -0
- package/src/templates/default/client/routes/_index.tsx +19 -0
- package/src/templates/default/client/routes.ts +4 -0
- package/src/templates/default/client/vite-env.d.ts +5 -0
- package/src/templates/default/package.json +5 -7
- package/src/templates/default/react-router.config.ts +6 -0
- package/src/templates/default/server/lib/watcher.ts +21 -0
- package/src/templates/default/server/plugins/auth.ts +5 -0
- package/src/templates/default/server/plugins/file-sync.ts +39 -0
- package/src/templates/default/server/routes/[...page].get.ts +12 -0
- package/src/templates/default/server/routes/api/events.get.ts +7 -0
- package/src/templates/default/server/routes/api/file-sync/status.get.ts +13 -0
- package/src/templates/default/server/routes/api/hello.get.ts +5 -0
- package/src/templates/default/tsconfig.json +9 -1
- package/src/templates/default/vite.config.ts +4 -1
- package/tsconfig.base.json +3 -1
- package/dist/adapters/neon/adapter.d.ts +0 -28
- package/dist/adapters/neon/adapter.d.ts.map +0 -1
- package/dist/adapters/neon/adapter.js +0 -135
- package/dist/adapters/neon/adapter.js.map +0 -1
- package/dist/adapters/neon/index.d.ts +0 -3
- package/dist/adapters/neon/index.d.ts.map +0 -1
- package/dist/adapters/neon/index.js +0 -3
- package/dist/adapters/neon/index.js.map +0 -1
- package/dist/server/production.d.ts +0 -18
- package/dist/server/production.d.ts.map +0 -1
- package/dist/server/production.js +0 -37
- package/dist/server/production.js.map +0 -1
- package/dist/vite/express-plugin.d.ts +0 -14
- package/dist/vite/express-plugin.d.ts.map +0 -1
- package/dist/vite/express-plugin.js +0 -53
- package/dist/vite/express-plugin.js.map +0 -1
- package/dist/vite/server.d.ts +0 -21
- package/dist/vite/server.d.ts.map +0 -1
- package/dist/vite/server.js +0 -68
- package/dist/vite/server.js.map +0 -1
- package/src/templates/default/index.html +0 -14
- package/src/templates/default/server/index.ts +0 -22
- package/src/templates/default/server/node-build.ts +0 -4
- package/src/templates/default/vite.config.server.ts +0 -3
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core script: db-query
|
|
3
|
+
*
|
|
4
|
+
* Run a read-only SQL query against a SQLite database.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* pnpm script db-query --sql "SELECT * FROM forms" [--db path] [--format json] [--limit N]
|
|
8
|
+
*/
|
|
9
|
+
import path from "path";
|
|
10
|
+
import fs from "fs";
|
|
11
|
+
import Database from "better-sqlite3";
|
|
12
|
+
import { parseArgs, fail } from "../utils.js";
|
|
13
|
+
export default async function dbQuery(args) {
|
|
14
|
+
const parsed = parseArgs(args);
|
|
15
|
+
if (parsed.help === "true") {
|
|
16
|
+
console.log(`Usage: pnpm script db-query --sql "<query>" [options]
|
|
17
|
+
|
|
18
|
+
Options:
|
|
19
|
+
--sql <query> SQL SELECT query to run (required)
|
|
20
|
+
--db <path> Path to SQLite database (default: data/app.db)
|
|
21
|
+
--format json Output as JSON instead of a table
|
|
22
|
+
--limit N Append LIMIT N if not already present
|
|
23
|
+
--help Show this help message`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const sql = parsed.sql;
|
|
27
|
+
if (!sql) {
|
|
28
|
+
fail('--sql is required. Example: --sql "SELECT * FROM forms"');
|
|
29
|
+
}
|
|
30
|
+
// Safety: only allow read-only statements.
|
|
31
|
+
// Strip leading SQL comments before checking the prefix.
|
|
32
|
+
const stripped = sql
|
|
33
|
+
.replace(/^\s*--[^\n]*\n/gm, "")
|
|
34
|
+
.replace(/\/\*[\s\S]*?\*\//g, "")
|
|
35
|
+
.trim();
|
|
36
|
+
const upper = stripped.toUpperCase();
|
|
37
|
+
if (!upper.startsWith("SELECT") &&
|
|
38
|
+
!upper.startsWith("WITH") &&
|
|
39
|
+
!upper.startsWith("EXPLAIN") &&
|
|
40
|
+
!upper.startsWith("PRAGMA")) {
|
|
41
|
+
fail("Only SELECT, WITH, EXPLAIN, and PRAGMA queries are allowed. Use db-exec for writes.");
|
|
42
|
+
}
|
|
43
|
+
const dbPath = parsed.db || path.join(process.cwd(), "data", "app.db");
|
|
44
|
+
if (!fs.existsSync(dbPath)) {
|
|
45
|
+
fail(`Database not found at ${dbPath}`);
|
|
46
|
+
}
|
|
47
|
+
const db = new Database(dbPath, { readonly: true });
|
|
48
|
+
try {
|
|
49
|
+
let finalSql = sql;
|
|
50
|
+
if (parsed.limit &&
|
|
51
|
+
(upper.startsWith("SELECT") || upper.startsWith("WITH")) &&
|
|
52
|
+
!/\bLIMIT\b/i.test(stripped)) {
|
|
53
|
+
const limitVal = parseInt(parsed.limit, 10);
|
|
54
|
+
if (isNaN(limitVal) || limitVal < 1)
|
|
55
|
+
fail("--limit must be a positive integer");
|
|
56
|
+
finalSql = `${sql} LIMIT ${limitVal}`;
|
|
57
|
+
}
|
|
58
|
+
const rows = db.prepare(finalSql).all();
|
|
59
|
+
if (parsed.format === "json") {
|
|
60
|
+
console.log(JSON.stringify({ query: finalSql, rows, count: rows.length }, null, 2));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Human-readable table output
|
|
64
|
+
console.log(`Query: ${finalSql}`);
|
|
65
|
+
console.log(`Rows: ${rows.length}\n`);
|
|
66
|
+
if (rows.length === 0) {
|
|
67
|
+
console.log("(no results)");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const keys = Object.keys(rows[0]);
|
|
71
|
+
const widths = keys.map((k) => {
|
|
72
|
+
const maxVal = Math.max(...rows.map((r) => String(r[k] ?? "NULL").length));
|
|
73
|
+
return Math.max(k.length, Math.min(maxVal, 60));
|
|
74
|
+
});
|
|
75
|
+
// Header
|
|
76
|
+
const header = keys.map((k, i) => k.padEnd(widths[i])).join(" | ");
|
|
77
|
+
console.log(header);
|
|
78
|
+
console.log(widths.map((w) => "-".repeat(w)).join("-+-"));
|
|
79
|
+
// Rows
|
|
80
|
+
for (const row of rows) {
|
|
81
|
+
const line = keys
|
|
82
|
+
.map((k, i) => {
|
|
83
|
+
const val = String(row[k] ?? "NULL");
|
|
84
|
+
return val.length > 60
|
|
85
|
+
? val.slice(0, 57) + "..."
|
|
86
|
+
: val.padEnd(widths[i]);
|
|
87
|
+
})
|
|
88
|
+
.join(" | ");
|
|
89
|
+
console.log(line);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
db.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/scripts/db/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core script: db-schema
|
|
3
|
+
*
|
|
4
|
+
* Inspects a SQLite database and prints all tables, columns, types,
|
|
5
|
+
* constraints, and foreign keys. Gives the agent full visibility
|
|
6
|
+
* into the app's data model.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* pnpm script db-schema [--db path] [--format json]
|
|
10
|
+
*/
|
|
11
|
+
export default function dbSchema(args: string[]): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/scripts/db/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA4BH,wBAA8B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoHpE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core script: db-schema
|
|
3
|
+
*
|
|
4
|
+
* Inspects a SQLite database and prints all tables, columns, types,
|
|
5
|
+
* constraints, and foreign keys. Gives the agent full visibility
|
|
6
|
+
* into the app's data model.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* pnpm script db-schema [--db path] [--format json]
|
|
10
|
+
*/
|
|
11
|
+
import path from "path";
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
import Database from "better-sqlite3";
|
|
14
|
+
import { parseArgs, fail } from "../utils.js";
|
|
15
|
+
export default async function dbSchema(args) {
|
|
16
|
+
const parsed = parseArgs(args);
|
|
17
|
+
if (parsed.help === "true") {
|
|
18
|
+
console.log(`Usage: pnpm script db-schema [--db <path>] [--format json]
|
|
19
|
+
|
|
20
|
+
Options:
|
|
21
|
+
--db <path> Path to SQLite database (default: data/app.db)
|
|
22
|
+
--format json Output as JSON instead of human-readable text
|
|
23
|
+
--help Show this help message`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const dbPath = parsed.db || path.join(process.cwd(), "data", "app.db");
|
|
27
|
+
if (!fs.existsSync(dbPath)) {
|
|
28
|
+
fail(`Database not found at ${dbPath}`);
|
|
29
|
+
}
|
|
30
|
+
const db = new Database(dbPath, { readonly: true });
|
|
31
|
+
try {
|
|
32
|
+
const tables = db
|
|
33
|
+
.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name`)
|
|
34
|
+
.all();
|
|
35
|
+
const tableInfos = tables.map((t) => {
|
|
36
|
+
const escaped = t.name.replace(/"/g, '""');
|
|
37
|
+
const columns = db.pragma(`table_info("${escaped}")`);
|
|
38
|
+
const fks = db.pragma(`foreign_key_list("${escaped}")`);
|
|
39
|
+
const idxList = db.pragma(`index_list("${escaped}")`);
|
|
40
|
+
const indexes = idxList
|
|
41
|
+
.filter((idx) => !idx.name.startsWith("sqlite_"))
|
|
42
|
+
.map((idx) => {
|
|
43
|
+
const idxInfo = db.pragma(`index_info("${idx.name.replace(/"/g, '""')}")`);
|
|
44
|
+
return {
|
|
45
|
+
name: idx.name,
|
|
46
|
+
unique: idx.unique === 1,
|
|
47
|
+
columns: idxInfo.map((c) => c.name),
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
name: t.name,
|
|
52
|
+
columns: columns.map((c) => ({
|
|
53
|
+
name: c.name,
|
|
54
|
+
type: c.type || "ANY",
|
|
55
|
+
notnull: c.notnull === 1,
|
|
56
|
+
pk: c.pk === 1,
|
|
57
|
+
dflt_value: c.dflt_value,
|
|
58
|
+
})),
|
|
59
|
+
foreignKeys: fks.map((fk) => ({
|
|
60
|
+
from: fk.from,
|
|
61
|
+
table: fk.table,
|
|
62
|
+
to: fk.to,
|
|
63
|
+
})),
|
|
64
|
+
indexes,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
if (parsed.format === "json") {
|
|
68
|
+
console.log(JSON.stringify({ database: dbPath, tables: tableInfos }, null, 2));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
// Human-readable output
|
|
72
|
+
console.log(`Database: ${dbPath}`);
|
|
73
|
+
console.log(`Tables: ${tableInfos.length}\n`);
|
|
74
|
+
for (const table of tableInfos) {
|
|
75
|
+
console.log(`Table: ${table.name} (${table.columns.length} columns)`);
|
|
76
|
+
// Build FK lookup for annotation
|
|
77
|
+
const fkMap = new Map();
|
|
78
|
+
for (const fk of table.foreignKeys) {
|
|
79
|
+
fkMap.set(fk.from, `${fk.table}(${fk.to})`);
|
|
80
|
+
}
|
|
81
|
+
// Find max widths for alignment
|
|
82
|
+
const nameWidth = Math.max(...table.columns.map((c) => c.name.length));
|
|
83
|
+
const typeWidth = Math.max(...table.columns.map((c) => c.type.length));
|
|
84
|
+
for (const col of table.columns) {
|
|
85
|
+
const parts = [];
|
|
86
|
+
if (col.pk)
|
|
87
|
+
parts.push("PRIMARY KEY");
|
|
88
|
+
if (col.notnull && !col.pk)
|
|
89
|
+
parts.push("NOT NULL");
|
|
90
|
+
if (col.dflt_value !== null)
|
|
91
|
+
parts.push(`DEFAULT ${col.dflt_value}`);
|
|
92
|
+
const fkRef = fkMap.get(col.name);
|
|
93
|
+
if (fkRef)
|
|
94
|
+
parts.push(`→ ${fkRef}`);
|
|
95
|
+
const constraint = parts.length > 0 ? ` ${parts.join(", ")}` : "";
|
|
96
|
+
console.log(` ${col.name.padEnd(nameWidth)} ${col.type.padEnd(typeWidth)}${constraint}`);
|
|
97
|
+
}
|
|
98
|
+
if (table.indexes.length > 0) {
|
|
99
|
+
console.log(` Indexes:`);
|
|
100
|
+
for (const idx of table.indexes) {
|
|
101
|
+
const unique = idx.unique ? "UNIQUE " : "";
|
|
102
|
+
console.log(` ${unique}${idx.name} (${idx.columns.join(", ")})`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
db.close();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/scripts/db/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/scripts/index.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export { runScript } from "./runner.js";
|
|
2
2
|
export { loadEnv, parseArgs, camelCaseArgs, isValidPath, isValidProjectPath, ensureDir, fail, } from "./utils.js";
|
|
3
|
+
export { coreScripts, getCoreScriptNames } from "./core-scripts.js";
|
|
4
|
+
export { default as dbSchema } from "./db/schema.js";
|
|
5
|
+
export { default as dbQuery } from "./db/query.js";
|
|
6
|
+
export { default as dbExec } from "./db/exec.js";
|
|
3
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,IAAI,GACL,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/scripts/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
export { runScript } from "./runner.js";
|
|
2
2
|
export { loadEnv, parseArgs, camelCaseArgs, isValidPath, isValidProjectPath, ensureDir, fail, } from "./utils.js";
|
|
3
|
+
export { coreScripts, getCoreScriptNames } from "./core-scripts.js";
|
|
4
|
+
export { default as dbSchema } from "./db/schema.js";
|
|
5
|
+
export { default as dbQuery } from "./db/query.js";
|
|
6
|
+
export { default as dbExec } from "./db/exec.js";
|
|
3
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,IAAI,GACL,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/scripts/runner.d.ts
CHANGED
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
* Generic script dispatcher for @agent-native/core apps.
|
|
3
3
|
*
|
|
4
4
|
* Dynamically imports and runs scripts from the app's scripts/ directory.
|
|
5
|
+
* Falls back to core scripts (db-schema, db-query, db-exec, etc.) when
|
|
6
|
+
* no local script is found.
|
|
7
|
+
*
|
|
5
8
|
* Scripts must export a default function: (args: string[]) => Promise<void>
|
|
6
9
|
*
|
|
7
10
|
* Usage: pnpm script <script-name> [--args]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/scripts/runner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/scripts/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH;;;;;GAKG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA2E/C"}
|
package/dist/scripts/runner.js
CHANGED
|
@@ -2,12 +2,17 @@
|
|
|
2
2
|
* Generic script dispatcher for @agent-native/core apps.
|
|
3
3
|
*
|
|
4
4
|
* Dynamically imports and runs scripts from the app's scripts/ directory.
|
|
5
|
+
* Falls back to core scripts (db-schema, db-query, db-exec, etc.) when
|
|
6
|
+
* no local script is found.
|
|
7
|
+
*
|
|
5
8
|
* Scripts must export a default function: (args: string[]) => Promise<void>
|
|
6
9
|
*
|
|
7
10
|
* Usage: pnpm script <script-name> [--args]
|
|
8
11
|
*/
|
|
9
12
|
import path from "path";
|
|
13
|
+
import fs from "fs";
|
|
10
14
|
import { pathToFileURL } from "url";
|
|
15
|
+
import { coreScripts, getCoreScriptNames } from "./core-scripts.js";
|
|
11
16
|
/**
|
|
12
17
|
* Run the script dispatcher. Call this from your app's scripts/run.ts:
|
|
13
18
|
*
|
|
@@ -19,6 +24,28 @@ export async function runScript() {
|
|
|
19
24
|
if (!scriptName || scriptName === "--help") {
|
|
20
25
|
console.log(`Usage: pnpm script <script-name> [--arg value ...]`);
|
|
21
26
|
console.log(`\nRun any script with --help for usage details.`);
|
|
27
|
+
// List local scripts
|
|
28
|
+
const localDir = path.resolve(process.cwd(), "scripts");
|
|
29
|
+
if (fs.existsSync(localDir)) {
|
|
30
|
+
const locals = fs
|
|
31
|
+
.readdirSync(localDir)
|
|
32
|
+
.filter((f) => f.endsWith(".ts") && f !== "run.ts")
|
|
33
|
+
.map((f) => f.replace(/\.ts$/, ""));
|
|
34
|
+
if (locals.length > 0) {
|
|
35
|
+
console.log(`\nApp scripts:`);
|
|
36
|
+
for (const name of locals) {
|
|
37
|
+
console.log(` ${name}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// List core scripts
|
|
42
|
+
const coreNames = getCoreScriptNames();
|
|
43
|
+
if (coreNames.length > 0) {
|
|
44
|
+
console.log(`\nCore scripts (built-in):`);
|
|
45
|
+
for (const name of coreNames) {
|
|
46
|
+
console.log(` ${name}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
22
49
|
process.exit(0);
|
|
23
50
|
}
|
|
24
51
|
// Validate script name (only allow alphanumeric + hyphens)
|
|
@@ -26,23 +53,35 @@ export async function runScript() {
|
|
|
26
53
|
console.error(`Error: Invalid script name "${scriptName}"`);
|
|
27
54
|
process.exit(1);
|
|
28
55
|
}
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
56
|
+
const args = process.argv.slice(3);
|
|
57
|
+
// 1. Try local app script first
|
|
58
|
+
const scriptPath = path.resolve(process.cwd(), "scripts", `${scriptName}.ts`);
|
|
59
|
+
if (fs.existsSync(scriptPath)) {
|
|
60
|
+
try {
|
|
61
|
+
const mod = await import(
|
|
62
|
+
/* @vite-ignore */ pathToFileURL(scriptPath).href);
|
|
63
|
+
await mod.default(args);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
console.error(`Script "${scriptName}" failed:`, err.message || err);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
36
70
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
71
|
+
// 2. Fall back to core scripts
|
|
72
|
+
const coreScript = coreScripts[scriptName];
|
|
73
|
+
if (coreScript) {
|
|
74
|
+
try {
|
|
75
|
+
await coreScript(args);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.error(`Core script "${scriptName}" failed:`, err.message || err);
|
|
42
80
|
process.exit(1);
|
|
43
81
|
}
|
|
44
|
-
console.error(`Script "${scriptName}" failed:`, err.message || err);
|
|
45
|
-
process.exit(1);
|
|
46
82
|
}
|
|
83
|
+
// 3. Not found anywhere
|
|
84
|
+
console.error(`Error: Script "${scriptName}" not found. Run "pnpm script --help" for available scripts.`);
|
|
85
|
+
process.exit(1);
|
|
47
86
|
}
|
|
48
87
|
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/scripts/runner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/scripts/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { App as H3App, H3Event } from "h3";
|
|
2
|
+
export interface AuthSession {
|
|
3
|
+
email: string;
|
|
4
|
+
userId?: string;
|
|
5
|
+
token?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AuthOptions {
|
|
8
|
+
/** Session max age in seconds. Default: 30 days */
|
|
9
|
+
maxAge?: number;
|
|
10
|
+
/** Path to the sessions file. Default: data/.sessions.json */
|
|
11
|
+
sessionsPath?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Custom getSession implementation (for BYOA — Auth.js, Clerk, etc.).
|
|
14
|
+
* When provided, the built-in token auth is bypassed entirely.
|
|
15
|
+
*/
|
|
16
|
+
getSession?: (event: H3Event) => Promise<AuthSession | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Paths that are accessible without authentication.
|
|
19
|
+
* Supports prefix matching: "/book" matches /book/anything.
|
|
20
|
+
* Both page routes and API routes can be made public.
|
|
21
|
+
*/
|
|
22
|
+
publicPaths?: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the current auth session for a request.
|
|
26
|
+
*
|
|
27
|
+
* - In dev mode: always returns { email: "local@localhost" }
|
|
28
|
+
* - In production with built-in auth: returns session if cookie is valid
|
|
29
|
+
* - With custom auth (BYOA): delegates to the custom getSession
|
|
30
|
+
*/
|
|
31
|
+
export declare function getSession(event: H3Event): Promise<AuthSession | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Mount auth middleware + login/logout/session routes onto an H3 app.
|
|
34
|
+
*
|
|
35
|
+
* @deprecated Use `autoMountAuth(app, options?)` instead for automatic
|
|
36
|
+
* dev/prod behavior. This function is kept for backwards compatibility
|
|
37
|
+
* when you need explicit control over the access token.
|
|
38
|
+
*/
|
|
39
|
+
export declare function mountAuthMiddleware(app: H3App, accessToken: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Automatically configure auth based on the environment:
|
|
42
|
+
*
|
|
43
|
+
* - **Dev mode** (`NODE_ENV !== "production"`): Auth is skipped entirely.
|
|
44
|
+
* `getSession()` returns `{ email: "local@localhost" }` for all requests.
|
|
45
|
+
*
|
|
46
|
+
* - **Production with ACCESS_TOKEN/ACCESS_TOKENS set**: Auth middleware is
|
|
47
|
+
* mounted. Unauthenticated requests see a login page. One env var is all
|
|
48
|
+
* you need.
|
|
49
|
+
*
|
|
50
|
+
* - **Production without tokens and AUTH_DISABLED !== "true"**: Refuses to
|
|
51
|
+
* start. Logs a clear error explaining what to do.
|
|
52
|
+
*
|
|
53
|
+
* - **Production with AUTH_DISABLED=true**: Auth is skipped (for apps behind
|
|
54
|
+
* infrastructure-level auth like Cloudflare Access or a VPN).
|
|
55
|
+
*
|
|
56
|
+
* Returns true if auth was mounted, false if skipped.
|
|
57
|
+
*/
|
|
58
|
+
export declare function autoMountAuth(app: H3App, options?: AuthOptions): boolean;
|
|
59
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,GAAG,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAMhD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC7D;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAiHD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAW5E;AAkHD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAEzE;AA8GD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAuK5E"}
|