@taopao/memoir 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +8 -2
- package/assets/migrations-pg/0100_baseline.sql +1115 -0
- package/assets/migrations-pg/0101_functions.sql +93 -0
- package/assets/migrations-pg/0102_views.sql +2425 -0
- package/assets/migrations-pg/0103_constraints.sql +147 -0
- package/assets/migrations-pg/0104_protection.sql +33 -0
- package/assets/migrations-pg/0105_bocom_credit_card.sql +43 -0
- package/assets/migrations-pg/0106_psbc_debit_card.sql +87 -0
- package/assets/migrations-pg/0107_tailong_debit_card.sql +87 -0
- package/assets/migrations-pg/0108_ccb_debit_card.sql +87 -0
- package/assets/migrations-pg/0109_ccb_credit_card.sql +63 -0
- package/assets/migrations-pg/0110_icbc_debit_card.sql +87 -0
- package/assets/migrations-pg/0111_icbc_credit_card.sql +66 -0
- package/assets/migrations-pg/0112_boc_debit_card.sql +88 -0
- package/assets/migrations-pg/0113_jsb_debit_card.sql +88 -0
- package/assets/migrations-pg/0114_cmbc_debit_card.sql +88 -0
- package/assets/migrations-pg/0115_hzbank_debit_card.sql +88 -0
- package/assets/migrations-pg/0116_unified_bank_documents.sql +197 -0
- package/assets/migrations-pg/0117_agent_submissions.sql +50 -0
- package/assets/migrations-pg/0118_agent_reversions_analysis.sql +34 -0
- package/assets/migrations-pg/0119_agent_extension_registry.sql +72 -0
- package/assets/migrations-pg/0120_agent_record_sources.sql +22 -0
- package/assets/migrations-pg/0121_agent_extension_deprecation.sql +30 -0
- package/assets/migrations-pg/0122_agent_extension_controlled_revert.sql +107 -0
- package/assets/migrations-pg/0123_agent_extension_versions.sql +54 -0
- package/assets/migrations-pg/0124_agent_extension_retirement_groups.sql +26 -0
- package/assets/migrations-pg/0125_agent_candidate_reviews.sql +30 -0
- package/assets/migrations-pg/0126_agent_module_lifecycle.sql +93 -0
- package/assets/migrations-pg/0127_agent_tasks.sql +64 -0
- package/assets/migrations-pg/0128_agent_task_leases.sql +80 -0
- package/assets/migrations-pg/0129_agent_task_plans.sql +66 -0
- package/assets/migrations-pg/0130_agent_task_submissions.sql +72 -0
- package/assets/migrations-pg/0131_agent_task_completions.sql +93 -0
- package/assets/migrations-pg/0132_agent_task_changes.sql +113 -0
- package/assets/migrations-pg/0133_agent_imported_source_snapshots.sql +152 -0
- package/assets/migrations-pg/0134_agent_analysis_datasets.sql +6 -0
- package/assets/migrations-pg/0135_agent_maintenance_tasks.sql +139 -0
- package/assets/migrations-pg/0136_agent_task_structures.sql +66 -0
- package/assets/migrations-pg/0137_agent_personal_identity.sql +149 -0
- package/assets/migrations-pg/0138_agent_work_records.sql +24 -0
- package/assets/migrations-pg/0139_shared_files.sql +43 -0
- package/assets/migrations-pg/0140_shared_script_runs.sql +36 -0
- package/assets/migrations-pg/0141_payment_bank_links.sql +96 -0
- package/assets/migrations-pg/0142_consumption_order_types_and_places.sql +287 -0
- package/assets/migrations-pg/0143_skill_direct_write.sql +330 -0
- package/assets/migrations-pg/0144_skill_schema_archive.sql +73 -0
- package/assets/migrations-pg/0145_skill_ingest_wiki.sql +91 -0
- package/assets/migrations-pg/0146_skill_load.sql +17 -0
- package/assets/migrations-pg/0147_drop_agent_schema.sql +147 -0
- package/assets/migrations-pg/0148_ingest_lanes.sql +19 -0
- package/assets/migrations-pg/0149_account_ownership.sql +233 -0
- package/assets/migrations-pg/0150_bank_card_exact_link.sql +24 -0
- package/assets/migrations-pg/0151_account_ownership_enforce.sql +35 -0
- package/assets/migrations-pg/0152_account_ownership_views.sql +750 -0
- package/assets/migrations-pg/0153_web_frontend.sql +34 -0
- package/assets/migrations-pg/0154_audio_record_owners.sql +103 -0
- package/assets/migrations-pg/0155_ingest_knowledge_tables.sql +171 -0
- package/assets/migrations-pg/0156_batch_playbook_note.sql +17 -0
- package/assets/migrations-pg/0157_last_contact.sql +166 -0
- package/assets/migrations-pg/0158_refund_match_hash_join.sql +91 -0
- package/assets/migrations-pg/0159_fact_occurred_time.sql +88 -0
- package/assets/migrations-pg/0160_agent_notes.sql +118 -0
- package/assets/migrations-pg/0161_life_history.sql +314 -0
- package/assets/migrations-pg/0162_person_card.sql +427 -0
- package/assets/migrations-pg/0163_parking_drop_personal_defaults.sql +12 -0
- package/assets/native/darwin-arm64.node +0 -0
- package/assets/playbooks/audio.md +83 -0
- package/assets/playbooks/chat.md +37 -0
- package/assets/playbooks/common.md +66 -0
- package/assets/playbooks/intimate.md +19 -0
- package/assets/playbooks/journal.md +17 -0
- package/assets/playbooks/orders.md +15 -0
- package/assets/playbooks/payments.md +16 -0
- package/assets/playbooks/self.md +29 -0
- package/bin/install-codex-skill.mjs +77 -0
- package/bin/memoir.mjs +5 -0
- package/dist/cli.js +34062 -0
- package/package.json +40 -4
- package/release-manifest.json +432 -0
- package/skill/SKILL.md +120 -0
- package/skill/references//345/256/211/350/243/205/344/275/215/347/275/256.md +21 -0
- package/skill/references//346/225/260/346/215/256/345/217/243/345/276/204.md +36 -0
- package/skill/scripts/memoir.mjs +82 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
-- 日历、身份匹配与目录查询函数;所有业务时间仍按原来的文本格式返回。
|
|
2
|
+
CREATE TABLE vault_lunar_calendar (
|
|
3
|
+
solar_date text PRIMARY KEY,
|
|
4
|
+
lunar_year bigint NOT NULL,
|
|
5
|
+
lunar_month bigint NOT NULL,
|
|
6
|
+
lunar_day bigint NOT NULL,
|
|
7
|
+
leap smallint NOT NULL CHECK (leap IN (0,1)),
|
|
8
|
+
zodiac text NOT NULL,
|
|
9
|
+
UNIQUE(lunar_year,lunar_month,lunar_day,leap)
|
|
10
|
+
);
|
|
11
|
+
CREATE TABLE vault_meta (id bigint PRIMARY KEY CHECK(id=1), data_version bigint NOT NULL DEFAULT 0, migration_state text NOT NULL DEFAULT 'ready');
|
|
12
|
+
INSERT INTO vault_meta(id) VALUES(1);
|
|
13
|
+
CREATE TABLE vault_migration_sources (id text PRIMARY KEY, metadata_json text NOT NULL CHECK(vault_json_valid(metadata_json)), completed smallint NOT NULL DEFAULT 0 CHECK(completed IN(0,1)));
|
|
14
|
+
|
|
15
|
+
CREATE FUNCTION vault_today() RETURNS text LANGUAGE sql STABLE AS $$ SELECT coalesce(nullif(current_setting('vault.today',true),''),to_char(now() AT TIME ZONE 'Asia/Shanghai','YYYY-MM-DD')) $$;
|
|
16
|
+
CREATE FUNCTION vault_lunar_year(value text) RETURNS bigint LANGUAGE sql STABLE AS $$ SELECT lunar_year FROM vault_lunar_calendar WHERE solar_date=value $$;
|
|
17
|
+
CREATE FUNCTION vault_zodiac(value text) RETURNS text LANGUAGE sql STABLE AS $$ SELECT zodiac FROM vault_lunar_calendar WHERE solar_date=value $$;
|
|
18
|
+
CREATE FUNCTION vault_chinese_number(value text) RETURNS bigint LANGUAGE plpgsql IMMUTABLE AS $$
|
|
19
|
+
DECLARE digits text := '一二三四五六七八九'; parts text[]; item text; total bigint;
|
|
20
|
+
BEGIN
|
|
21
|
+
IF value ~ '^\d+$' THEN RETURN value::bigint; END IF;
|
|
22
|
+
IF value='正' THEN RETURN 1; ELSIF value='冬' THEN RETURN 11; ELSIF value IN('腊','臘') THEN RETURN 12; END IF;
|
|
23
|
+
item := regexp_replace(replace(replace(value,'廿','二十'),'卅','三十'),'^初','');
|
|
24
|
+
IF item='十' THEN RETURN 10; END IF;
|
|
25
|
+
IF strpos(item,'十')>0 THEN
|
|
26
|
+
parts:=string_to_array(item,'十');
|
|
27
|
+
IF (parts[1]<>'' AND (length(parts[1])<>1 OR strpos(digits,parts[1])=0)) OR (parts[2]<>'' AND (length(parts[2])<>1 OR strpos(digits,parts[2])=0)) THEN RETURN NULL; END IF;
|
|
28
|
+
RETURN (CASE WHEN parts[1]='' THEN 1 ELSE strpos(digits,parts[1]) END)*10 + CASE WHEN parts[2]='' THEN 0 ELSE strpos(digits,parts[2]) END;
|
|
29
|
+
END IF;
|
|
30
|
+
IF length(item)=1 AND strpos(digits,item)>0 THEN RETURN strpos(digits,item); END IF;
|
|
31
|
+
RETURN NULL;
|
|
32
|
+
END $$;
|
|
33
|
+
CREATE FUNCTION vault_calendar_date(calendar text, value text, wanted_year bigint) RETURNS text LANGUAGE plpgsql STABLE AS $$
|
|
34
|
+
DECLARE text_value text; parts text[]; y bigint; m bigint; d bigint; is_leap smallint;
|
|
35
|
+
BEGIN
|
|
36
|
+
IF calendar IS NULL OR value IS NULL THEN RETURN NULL; END IF;
|
|
37
|
+
IF calendar='solar' THEN
|
|
38
|
+
IF value !~ '^\d{4}-\d{2}-\d{2}$' OR NOT pg_input_is_valid(value,'date') THEN RETURN NULL; END IF;
|
|
39
|
+
IF wanted_year IS NULL THEN RETURN value; END IF;
|
|
40
|
+
text_value:=wanted_year::text||substr(value,5);
|
|
41
|
+
IF text_value !~ '^\d{4}-\d{2}-\d{2}$' OR NOT pg_input_is_valid(text_value,'date') THEN RETURN NULL; END IF;
|
|
42
|
+
RETURN text_value;
|
|
43
|
+
END IF;
|
|
44
|
+
IF calendar<>'lunar' THEN RETURN NULL; END IF;
|
|
45
|
+
text_value:=regexp_replace(regexp_replace(trim(value),'^(农历|農曆)\s*',''),'\s+','','g');
|
|
46
|
+
parts:=regexp_match(text_value,'^(?:(\d{4})[-/年])?(闰|閏)?(\d{1,2})[-/月](\d{1,2})(?:日)?$');
|
|
47
|
+
IF parts IS NULL THEN parts:=regexp_match(text_value,'^(?:(\d{4})年)?(闰|閏)?([正冬腊臘一二三四五六七八九十]+)月([初廿卅一二三四五六七八九十]+)(?:日)?$'); END IF;
|
|
48
|
+
IF parts IS NULL THEN RETURN NULL; END IF;
|
|
49
|
+
y:=coalesce(wanted_year,parts[1]::bigint);m:=vault_chinese_number(parts[3]);d:=vault_chinese_number(parts[4]);is_leap:=CASE WHEN parts[2] IS NULL THEN 0 ELSE 1 END;
|
|
50
|
+
IF y IS NULL OR y<1900 OR y>2100 OR m<1 OR m>12 OR d<1 OR d>30 THEN RETURN NULL; END IF;
|
|
51
|
+
RETURN (SELECT solar_date FROM vault_lunar_calendar WHERE lunar_year=y AND lunar_month=m AND lunar_day=d AND leap=is_leap);
|
|
52
|
+
END $$;
|
|
53
|
+
CREATE FUNCTION vault_identity_match(mode text, value text, subject text) RETURNS bigint LANGUAGE plpgsql IMMUTABLE AS $$
|
|
54
|
+
BEGIN
|
|
55
|
+
IF value IS NULL OR subject IS NULL THEN RETURN 0; END IF;
|
|
56
|
+
IF mode='exact' THEN RETURN (subject=value)::int; END IF;
|
|
57
|
+
IF mode='contains' THEN RETURN (strpos(subject,value)>0)::int; END IF;
|
|
58
|
+
IF mode='regex' THEN BEGIN RETURN (subject ~ value)::int; EXCEPTION WHEN invalid_regular_expression THEN RETURN 0; END; END IF;
|
|
59
|
+
RETURN 0;
|
|
60
|
+
END $$;
|
|
61
|
+
CREATE FUNCTION vault_json_extract(value text, path text) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT value::jsonb #>> string_to_array(substr(path,3),'.') $$;
|
|
62
|
+
|
|
63
|
+
-- 为已有用户 SQL 和元数据查询提供明确的目录适配,业务表不混入此目录。
|
|
64
|
+
CREATE VIEW vault_schema_objects AS
|
|
65
|
+
SELECT CASE c.relkind WHEN 'v' THEN 'view' ELSE 'table' END::text AS type,c.relname::text AS name,c.relname::text AS tbl_name,
|
|
66
|
+
CASE WHEN c.relkind='v' THEN pg_get_viewdef(c.oid,true) ELSE NULL END::text AS sql
|
|
67
|
+
FROM pg_class c JOIN pg_namespace n ON n.oid=c.relnamespace WHERE n.nspname='public' AND c.relkind IN('r','v') AND c.relname NOT LIKE 'vault_%'
|
|
68
|
+
UNION ALL
|
|
69
|
+
SELECT 'trigger',t.tgname::text,c.relname::text,pg_get_triggerdef(t.oid)::text FROM pg_trigger t JOIN pg_class c ON c.oid=t.tgrelid JOIN pg_namespace n ON n.oid=c.relnamespace WHERE NOT t.tgisinternal AND n.nspname='public';
|
|
70
|
+
CREATE VIEW vault_table_list AS SELECT 'main'::text AS schema,name,type FROM vault_schema_objects WHERE type IN('table','view');
|
|
71
|
+
CREATE FUNCTION vault_table_info(table_name text) RETURNS TABLE(cid bigint,name text,type text,"notnull" bigint,dflt_value text,pk bigint) LANGUAGE sql STABLE AS $$
|
|
72
|
+
SELECT a.attnum::bigint-1,a.attname::text,format_type(a.atttypid,a.atttypmod),a.attnotnull::int::bigint,pg_get_expr(d.adbin,d.adrelid),coalesce(array_position(i.indkey::smallint[],a.attnum)+1,0)::bigint
|
|
73
|
+
FROM pg_attribute a JOIN pg_class c ON c.oid=a.attrelid JOIN pg_namespace n ON n.oid=c.relnamespace
|
|
74
|
+
LEFT JOIN pg_index i ON i.indrelid=c.oid AND i.indisprimary LEFT JOIN pg_attrdef d ON d.adrelid=c.oid AND d.adnum=a.attnum
|
|
75
|
+
WHERE n.nspname='public' AND c.relname=table_name AND a.attnum>0 AND NOT a.attisdropped ORDER BY a.attnum
|
|
76
|
+
$$;
|
|
77
|
+
|
|
78
|
+
-- SQLite JSON 表函数的文本接口用于旧视图,PG 仍使用原生 JSON 执行。
|
|
79
|
+
CREATE FUNCTION json_extract_path_text(value text, VARIADIC path text[]) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT value::jsonb #>> path $$;
|
|
80
|
+
CREATE FUNCTION json_each(json_input text) RETURNS TABLE(key text,value text) LANGUAGE plpgsql IMMUTABLE AS $$
|
|
81
|
+
DECLARE parsed jsonb:=json_input::jsonb;
|
|
82
|
+
BEGIN
|
|
83
|
+
IF jsonb_typeof(parsed)='array' THEN RETURN QUERY SELECT (ord-1)::text, CASE WHEN jsonb_typeof(element)='string' THEN element #>> '{}' ELSE element::text END FROM jsonb_array_elements(parsed) WITH ORDINALITY AS a(element,ord);
|
|
84
|
+
ELSIF jsonb_typeof(parsed)='object' THEN RETURN QUERY SELECT k,CASE WHEN jsonb_typeof(v)='string' THEN v #>> '{}' ELSE v::text END FROM jsonb_each(parsed) AS a(k,v);
|
|
85
|
+
END IF;
|
|
86
|
+
END $$;
|
|
87
|
+
CREATE FUNCTION julianday(value text) RETURNS double precision LANGUAGE sql IMMUTABLE AS $$ SELECT CASE WHEN pg_input_is_valid(value,'timestamp') THEN extract(epoch FROM value::timestamp)/86400.0+2440587.5 END $$;
|
|
88
|
+
CREATE FUNCTION public.date(value text) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT CASE WHEN pg_input_is_valid(substr(value,1,10),'date') THEN substr(value,1,10) END $$;
|
|
89
|
+
CREATE FUNCTION public.date(value text, modifier text) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT CASE WHEN pg_input_is_valid(substr(value,1,10),'date') AND modifier ~ '^[+-]?[0-9]+ days?$' THEN to_char(substr(value,1,10)::date + split_part(modifier,' ',1)::int,'YYYY-MM-DD') END $$;
|
|
90
|
+
CREATE FUNCTION json_type(value text) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT CASE jsonb_typeof(value::jsonb) WHEN 'string' THEN 'text' WHEN 'number' THEN CASE WHEN value ~ '^\s*[+-]?[0-9]+\s*$' THEN 'integer' ELSE 'real' END WHEN 'boolean' THEN value::jsonb::text ELSE jsonb_typeof(value::jsonb) END $$;
|
|
91
|
+
-- 录音逐句时间保留毫秒格式,与 SQLite strftime('%f') 的输出一致。
|
|
92
|
+
CREATE FUNCTION printf(pattern text, value numeric) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT CASE WHEN pattern='+%.3f seconds' THEN '+'||to_char(value,'FM9999999990.000')||' seconds' ELSE replace(pattern,'%d',value::bigint::text) END $$;
|
|
93
|
+
CREATE FUNCTION strftime(pattern text, value text, modifier text) RETURNS text LANGUAGE sql IMMUTABLE AS $$ SELECT CASE WHEN pattern='%Y-%m-%d %H:%M:%f' THEN to_char(value::timestamp+modifier::interval,'YYYY-MM-DD HH24:MI:SS.MS') END $$;
|