@iamem/amem 0.1.2 → 0.2.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 +64 -1
- package/dist/api/routes.js +337 -3
- package/dist/attest.d.ts +13 -0
- package/dist/attest.js +44 -0
- package/dist/capture.js +14 -5
- package/dist/cli.js +291 -6
- package/dist/context.d.ts +10 -1
- package/dist/context.js +105 -3
- package/dist/db.d.ts +141 -0
- package/dist/db.js +398 -0
- package/dist/embed.js +5 -14
- package/dist/estimate.d.ts +25 -1
- package/dist/estimate.js +36 -3
- package/dist/freshness.d.ts +7 -0
- package/dist/freshness.js +8 -1
- package/dist/hook.js +8 -1
- package/dist/hygiene.d.ts +26 -2
- package/dist/hygiene.js +42 -3
- package/dist/install/hosts.d.ts +15 -0
- package/dist/install/hosts.js +82 -4
- package/dist/install/skills.js +10 -5
- package/dist/kinds.d.ts +18 -0
- package/dist/kinds.js +80 -3
- package/dist/license.d.ts +1 -0
- package/dist/license.js +21 -19
- package/dist/mcp.js +221 -0
- package/dist/platforms.js +6 -0
- package/dist/policy.d.ts +6 -0
- package/dist/policy.js +16 -1
- package/dist/remember-contract.js +13 -4
- package/dist/repo-identity.d.ts +10 -0
- package/dist/repo-identity.js +20 -1
- package/dist/skill-capture.d.ts +43 -0
- package/dist/skill-capture.js +146 -0
- package/dist/skills.d.ts +106 -0
- package/dist/skills.js +422 -0
- package/docs/backlog.md +9 -0
- package/package.json +2 -1
- package/scripts/mcp-launch.sh +26 -0
- package/skills/amem-tasks/SKILL.md +100 -0
- package/skills/amem-write-skill/SKILL.md +99 -0
- package/templates/cursor-rule.mdc +16 -6
- package/templates/policy.deny-default.toml +5 -0
- package/templates/policy.example.toml +8 -0
- package/ui-static/app.js +458 -233
- package/ui-static/index.html +11 -34
- package/ui-static/styles.css +310 -1
package/ui-static/index.html
CHANGED
|
@@ -37,6 +37,14 @@
|
|
|
37
37
|
<span class="nav-ico" aria-hidden="true"></span>
|
|
38
38
|
Analytics
|
|
39
39
|
</button>
|
|
40
|
+
<button type="button" data-tab="tasks">
|
|
41
|
+
<span class="nav-ico" aria-hidden="true"></span>
|
|
42
|
+
Tasks
|
|
43
|
+
</button>
|
|
44
|
+
<button type="button" data-tab="skills">
|
|
45
|
+
<span class="nav-ico" aria-hidden="true"></span>
|
|
46
|
+
Skills
|
|
47
|
+
</button>
|
|
40
48
|
</nav>
|
|
41
49
|
<div class="side-footer">
|
|
42
50
|
<button class="side-foot-btn" id="personalBtn" type="button">Personal</button>
|
|
@@ -105,18 +113,6 @@
|
|
|
105
113
|
/>
|
|
106
114
|
<button class="btn secondary" id="vaultRestoreBtn" type="button">Restore</button>
|
|
107
115
|
</div>
|
|
108
|
-
<div class="add-repo-row" id="shopRow">
|
|
109
|
-
<a class="btn" id="buyPro" href="https://getamem.com/buy/pro" target="_blank" rel="noopener"
|
|
110
|
-
>Buy Pro · $12</a
|
|
111
|
-
>
|
|
112
|
-
<a class="btn secondary" id="buyIt" href="https://getamem.com/buy/it" target="_blank" rel="noopener"
|
|
113
|
-
>Buy IT · $49</a
|
|
114
|
-
>
|
|
115
|
-
<span class="note"
|
|
116
|
-
>After pay, download <code>amem-license.json</code> on the thank-you page, then apply it in Plans/Setup or
|
|
117
|
-
<code>amem license apply --file</code>.</span
|
|
118
|
-
>
|
|
119
|
-
</div>
|
|
120
116
|
<p class="note" id="vaultDetail"></p>
|
|
121
117
|
</div>
|
|
122
118
|
</div>
|
|
@@ -140,30 +136,11 @@
|
|
|
140
136
|
</div>
|
|
141
137
|
<script>
|
|
142
138
|
(function () {
|
|
143
|
-
var TABS = ["
|
|
139
|
+
var TABS = ["setup", "dashboard", "brain", "analytics", "tasks"];
|
|
144
140
|
var params = new URLSearchParams(location.search);
|
|
145
141
|
var fromUrl = params.get("tab");
|
|
146
|
-
var
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
welcomeDismissed = localStorage.getItem("amem.welcome.dismissed") === "1";
|
|
150
|
-
var tier = localStorage.getItem("amem.license.tier");
|
|
151
|
-
paid = tier === "pro" || tier === "it";
|
|
152
|
-
} catch (e) {}
|
|
153
|
-
var tab = "setup";
|
|
154
|
-
if (paid) {
|
|
155
|
-
if (fromUrl === "stats") tab = "analytics";
|
|
156
|
-
else if (TABS.indexOf(fromUrl) !== -1) tab = fromUrl;
|
|
157
|
-
else tab = "dashboard";
|
|
158
|
-
} else if (
|
|
159
|
-
!welcomeDismissed &&
|
|
160
|
-
fromUrl !== "brain" &&
|
|
161
|
-
fromUrl !== "stats" &&
|
|
162
|
-
fromUrl !== "analytics" &&
|
|
163
|
-
fromUrl !== "dashboard"
|
|
164
|
-
) {
|
|
165
|
-
tab = "welcome";
|
|
166
|
-
} else if (fromUrl === "stats") {
|
|
142
|
+
var tab = "dashboard";
|
|
143
|
+
if (fromUrl === "stats") {
|
|
167
144
|
tab = "analytics";
|
|
168
145
|
} else if (TABS.indexOf(fromUrl) !== -1) {
|
|
169
146
|
tab = fromUrl;
|
package/ui-static/styles.css
CHANGED
|
@@ -1126,7 +1126,9 @@ a.btn {
|
|
|
1126
1126
|
.orbit-host {
|
|
1127
1127
|
position: relative;
|
|
1128
1128
|
min-height: 320px;
|
|
1129
|
-
height: 100
|
|
1129
|
+
/* No height here: .viz-host's clamp() bounds the canvas. A height:100% (or a
|
|
1130
|
+
fr unit) resolves against the fact list, which can be thousands of rows,
|
|
1131
|
+
and starves the list's grid track down to 0. */
|
|
1130
1132
|
border-bottom: 1px solid var(--line);
|
|
1131
1133
|
background:
|
|
1132
1134
|
radial-gradient(ellipse at 50% 40%, rgba(46, 196, 182, 0.1), transparent 55%),
|
|
@@ -1171,6 +1173,13 @@ a.btn {
|
|
|
1171
1173
|
background: var(--bg2);
|
|
1172
1174
|
}
|
|
1173
1175
|
|
|
1176
|
+
.brain-v2 {
|
|
1177
|
+
flex: 1;
|
|
1178
|
+
min-height: 0;
|
|
1179
|
+
display: flex;
|
|
1180
|
+
flex-direction: column;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1174
1183
|
.brain-body {
|
|
1175
1184
|
display: flex;
|
|
1176
1185
|
flex-direction: column;
|
|
@@ -1857,6 +1866,305 @@ button.linkish:hover code {
|
|
|
1857
1866
|
.dash-grid {
|
|
1858
1867
|
grid-template-columns: 1fr;
|
|
1859
1868
|
}
|
|
1869
|
+
.tasks-board {
|
|
1870
|
+
grid-template-columns: 1fr;
|
|
1871
|
+
}
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
.tasks-add {
|
|
1875
|
+
display: grid;
|
|
1876
|
+
grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) auto;
|
|
1877
|
+
gap: 0.55rem;
|
|
1878
|
+
margin: 0 0 1.1rem;
|
|
1879
|
+
}
|
|
1880
|
+
.tasks-add input {
|
|
1881
|
+
background: rgba(20, 27, 33, 0.9);
|
|
1882
|
+
color: var(--ink);
|
|
1883
|
+
border: 1px solid var(--line);
|
|
1884
|
+
border-radius: 10px;
|
|
1885
|
+
padding: 0.6rem 0.75rem;
|
|
1886
|
+
font: inherit;
|
|
1887
|
+
}
|
|
1888
|
+
.tasks-board {
|
|
1889
|
+
display: grid;
|
|
1890
|
+
grid-template-columns: repeat(5, minmax(9.5rem, 1fr));
|
|
1891
|
+
gap: 0.65rem;
|
|
1892
|
+
align-items: start;
|
|
1893
|
+
}
|
|
1894
|
+
.tasks-col {
|
|
1895
|
+
border: 1px solid var(--line);
|
|
1896
|
+
border-radius: 14px;
|
|
1897
|
+
background: rgba(20, 27, 33, 0.55);
|
|
1898
|
+
min-height: 12rem;
|
|
1899
|
+
transition: border-color 0.15s ease, background 0.15s ease;
|
|
1900
|
+
}
|
|
1901
|
+
.tasks-col.drag-over {
|
|
1902
|
+
border-color: rgba(46, 196, 182, 0.55);
|
|
1903
|
+
background: rgba(46, 196, 182, 0.08);
|
|
1904
|
+
}
|
|
1905
|
+
.tasks-col > header {
|
|
1906
|
+
display: flex;
|
|
1907
|
+
align-items: center;
|
|
1908
|
+
justify-content: space-between;
|
|
1909
|
+
gap: 0.5rem;
|
|
1910
|
+
padding: 0.65rem 0.75rem 0.35rem;
|
|
1911
|
+
}
|
|
1912
|
+
.tasks-col > header h2 {
|
|
1913
|
+
margin: 0;
|
|
1914
|
+
font-size: 0.82rem;
|
|
1915
|
+
letter-spacing: 0.04em;
|
|
1916
|
+
text-transform: uppercase;
|
|
1917
|
+
color: var(--muted);
|
|
1918
|
+
font-weight: 600;
|
|
1919
|
+
}
|
|
1920
|
+
.tasks-col > header span {
|
|
1921
|
+
color: var(--muted);
|
|
1922
|
+
font-size: 0.78rem;
|
|
1923
|
+
font-variant-numeric: tabular-nums;
|
|
1924
|
+
}
|
|
1925
|
+
.tasks-col-body {
|
|
1926
|
+
padding: 0.35rem 0.55rem 0.7rem;
|
|
1927
|
+
display: flex;
|
|
1928
|
+
flex-direction: column;
|
|
1929
|
+
gap: 0.45rem;
|
|
1930
|
+
min-height: 4rem;
|
|
1931
|
+
}
|
|
1932
|
+
.tasks-empty {
|
|
1933
|
+
margin: 0.35rem 0.2rem;
|
|
1934
|
+
color: var(--muted);
|
|
1935
|
+
font-size: 0.8rem;
|
|
1936
|
+
}
|
|
1937
|
+
.tasks-card {
|
|
1938
|
+
border: 1px solid var(--line);
|
|
1939
|
+
border-radius: 12px;
|
|
1940
|
+
background: rgba(11, 15, 18, 0.75);
|
|
1941
|
+
padding: 0.65rem 0.7rem 0.55rem;
|
|
1942
|
+
cursor: grab;
|
|
1943
|
+
}
|
|
1944
|
+
.tasks-card.dragging {
|
|
1945
|
+
opacity: 0.55;
|
|
1946
|
+
}
|
|
1947
|
+
.tasks-card h3 {
|
|
1948
|
+
margin: 0;
|
|
1949
|
+
font-size: 0.92rem;
|
|
1950
|
+
font-weight: 600;
|
|
1951
|
+
letter-spacing: -0.01em;
|
|
1952
|
+
line-height: 1.3;
|
|
1953
|
+
}
|
|
1954
|
+
/* Skills — procedural memory library */
|
|
1955
|
+
.skill-grid {
|
|
1956
|
+
display: grid;
|
|
1957
|
+
gap: 0.75rem;
|
|
1958
|
+
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
1959
|
+
margin-top: 1rem;
|
|
1960
|
+
}
|
|
1961
|
+
|
|
1962
|
+
.skill-card {
|
|
1963
|
+
background: var(--card);
|
|
1964
|
+
border: 1px solid var(--line);
|
|
1965
|
+
border-radius: 12px;
|
|
1966
|
+
display: flex;
|
|
1967
|
+
flex-direction: column;
|
|
1968
|
+
gap: 0.4rem;
|
|
1969
|
+
padding: 0.85rem;
|
|
1970
|
+
}
|
|
1971
|
+
|
|
1972
|
+
.skill-card-head {
|
|
1973
|
+
align-items: baseline;
|
|
1974
|
+
display: flex;
|
|
1975
|
+
gap: 0.5rem;
|
|
1976
|
+
justify-content: space-between;
|
|
1977
|
+
}
|
|
1978
|
+
|
|
1979
|
+
.skill-card-head h3 {
|
|
1980
|
+
font-size: 0.95rem;
|
|
1981
|
+
margin: 0;
|
|
1982
|
+
word-break: break-word;
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
.skill-uses {
|
|
1986
|
+
color: var(--muted);
|
|
1987
|
+
flex: none;
|
|
1988
|
+
font-size: 0.7rem;
|
|
1989
|
+
}
|
|
1990
|
+
|
|
1991
|
+
.skill-card-desc {
|
|
1992
|
+
color: var(--muted);
|
|
1993
|
+
font-size: 0.82rem;
|
|
1994
|
+
line-height: 1.4;
|
|
1995
|
+
margin: 0;
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
.skill-card-desc.muted {
|
|
1999
|
+
font-style: italic;
|
|
2000
|
+
opacity: 0.75;
|
|
2001
|
+
}
|
|
2002
|
+
|
|
2003
|
+
.skill-card-tags {
|
|
2004
|
+
display: flex;
|
|
2005
|
+
flex-wrap: wrap;
|
|
2006
|
+
gap: 0.25rem;
|
|
2007
|
+
}
|
|
2008
|
+
|
|
2009
|
+
.skill-tag {
|
|
2010
|
+
border: 1px solid var(--line);
|
|
2011
|
+
border-radius: 999px;
|
|
2012
|
+
color: var(--muted);
|
|
2013
|
+
font-size: 0.68rem;
|
|
2014
|
+
padding: 0.05rem 0.4rem;
|
|
2015
|
+
}
|
|
2016
|
+
|
|
2017
|
+
.skill-card-actions {
|
|
2018
|
+
display: flex;
|
|
2019
|
+
gap: 0.4rem;
|
|
2020
|
+
margin-top: auto;
|
|
2021
|
+
padding-top: 0.35rem;
|
|
2022
|
+
}
|
|
2023
|
+
|
|
2024
|
+
.skill-empty {
|
|
2025
|
+
background: var(--card);
|
|
2026
|
+
border: 1px dashed var(--line);
|
|
2027
|
+
border-radius: 12px;
|
|
2028
|
+
margin-top: 1rem;
|
|
2029
|
+
padding: 1.5rem;
|
|
2030
|
+
}
|
|
2031
|
+
|
|
2032
|
+
.skill-empty h2 {
|
|
2033
|
+
font-size: 1.05rem;
|
|
2034
|
+
margin: 0 0 0.4rem;
|
|
2035
|
+
}
|
|
2036
|
+
|
|
2037
|
+
.skill-drafts {
|
|
2038
|
+
margin-top: 1.25rem;
|
|
2039
|
+
}
|
|
2040
|
+
|
|
2041
|
+
.skill-drafts h2 {
|
|
2042
|
+
font-size: 1rem;
|
|
2043
|
+
margin: 0 0 0.2rem;
|
|
2044
|
+
}
|
|
2045
|
+
|
|
2046
|
+
.skill-draft-list {
|
|
2047
|
+
display: grid;
|
|
2048
|
+
gap: 0.6rem;
|
|
2049
|
+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
2050
|
+
margin-top: 0.6rem;
|
|
2051
|
+
}
|
|
2052
|
+
|
|
2053
|
+
.skill-draft {
|
|
2054
|
+
background: var(--card);
|
|
2055
|
+
border: 1px solid var(--accent, var(--line));
|
|
2056
|
+
border-radius: 12px;
|
|
2057
|
+
padding: 0.8rem;
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2060
|
+
.skill-draft-kind {
|
|
2061
|
+
color: var(--muted);
|
|
2062
|
+
font-size: 0.68rem;
|
|
2063
|
+
font-weight: 600;
|
|
2064
|
+
letter-spacing: 0.03em;
|
|
2065
|
+
text-transform: uppercase;
|
|
2066
|
+
}
|
|
2067
|
+
|
|
2068
|
+
.skill-draft h4 {
|
|
2069
|
+
font-size: 0.9rem;
|
|
2070
|
+
margin: 0.25rem 0 0.35rem;
|
|
2071
|
+
}
|
|
2072
|
+
|
|
2073
|
+
.skill-draft-why,
|
|
2074
|
+
.skill-draft-hint {
|
|
2075
|
+
color: var(--muted);
|
|
2076
|
+
font-size: 0.76rem;
|
|
2077
|
+
line-height: 1.4;
|
|
2078
|
+
margin: 0 0 0.35rem;
|
|
2079
|
+
}
|
|
2080
|
+
|
|
2081
|
+
.skill-draft-actions {
|
|
2082
|
+
display: flex;
|
|
2083
|
+
gap: 0.4rem;
|
|
2084
|
+
}
|
|
2085
|
+
|
|
2086
|
+
.skill-detail {
|
|
2087
|
+
background: var(--card);
|
|
2088
|
+
border: 1px solid var(--line);
|
|
2089
|
+
border-radius: 12px;
|
|
2090
|
+
margin-top: 1rem;
|
|
2091
|
+
padding: 0.9rem;
|
|
2092
|
+
}
|
|
2093
|
+
|
|
2094
|
+
.skill-detail-head {
|
|
2095
|
+
align-items: center;
|
|
2096
|
+
display: flex;
|
|
2097
|
+
justify-content: space-between;
|
|
2098
|
+
margin-bottom: 0.5rem;
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2101
|
+
.skill-detail-head h2 {
|
|
2102
|
+
font-size: 1rem;
|
|
2103
|
+
margin: 0;
|
|
2104
|
+
}
|
|
2105
|
+
|
|
2106
|
+
.skill-detail-body {
|
|
2107
|
+
background: var(--bg);
|
|
2108
|
+
border: 1px solid var(--line);
|
|
2109
|
+
border-radius: 8px;
|
|
2110
|
+
font-size: 0.78rem;
|
|
2111
|
+
line-height: 1.5;
|
|
2112
|
+
max-height: 60vh;
|
|
2113
|
+
overflow: auto;
|
|
2114
|
+
padding: 0.75rem;
|
|
2115
|
+
white-space: pre-wrap;
|
|
2116
|
+
word-break: break-word;
|
|
2117
|
+
}
|
|
2118
|
+
|
|
2119
|
+
.tasks-card-repo {
|
|
2120
|
+
display: inline-block;
|
|
2121
|
+
margin-bottom: 0.3rem;
|
|
2122
|
+
padding: 0.08rem 0.4rem;
|
|
2123
|
+
border: 1px solid var(--line);
|
|
2124
|
+
border-radius: 999px;
|
|
2125
|
+
color: var(--muted);
|
|
2126
|
+
font-size: 0.68rem;
|
|
2127
|
+
font-weight: 600;
|
|
2128
|
+
letter-spacing: 0.01em;
|
|
2129
|
+
max-width: 100%;
|
|
2130
|
+
overflow: hidden;
|
|
2131
|
+
text-overflow: ellipsis;
|
|
2132
|
+
white-space: nowrap;
|
|
2133
|
+
}
|
|
2134
|
+
.tasks-card-body {
|
|
2135
|
+
margin: 0.35rem 0 0;
|
|
2136
|
+
color: var(--muted);
|
|
2137
|
+
font-size: 0.78rem;
|
|
2138
|
+
line-height: 1.35;
|
|
2139
|
+
}
|
|
2140
|
+
.tasks-card-actions {
|
|
2141
|
+
display: flex;
|
|
2142
|
+
align-items: center;
|
|
2143
|
+
gap: 0.35rem;
|
|
2144
|
+
margin-top: 0.55rem;
|
|
2145
|
+
}
|
|
2146
|
+
.tasks-status {
|
|
2147
|
+
flex: 1;
|
|
2148
|
+
min-width: 0;
|
|
2149
|
+
background: rgba(20, 27, 33, 0.95);
|
|
2150
|
+
color: var(--ink);
|
|
2151
|
+
border: 1px solid var(--line);
|
|
2152
|
+
border-radius: 8px;
|
|
2153
|
+
padding: 0.28rem 0.4rem;
|
|
2154
|
+
font: inherit;
|
|
2155
|
+
font-size: 0.75rem;
|
|
2156
|
+
}
|
|
2157
|
+
.tasks-del {
|
|
2158
|
+
padding: 0.25rem 0.45rem !important;
|
|
2159
|
+
}
|
|
2160
|
+
|
|
2161
|
+
@media (max-width: 1100px) {
|
|
2162
|
+
.tasks-board {
|
|
2163
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
2164
|
+
}
|
|
2165
|
+
.tasks-add {
|
|
2166
|
+
grid-template-columns: 1fr;
|
|
2167
|
+
}
|
|
1860
2168
|
}
|
|
1861
2169
|
|
|
1862
2170
|
.platform-card.accented {
|
|
@@ -2049,6 +2357,7 @@ button.linkish:hover code {
|
|
|
2049
2357
|
display: none;
|
|
2050
2358
|
}
|
|
2051
2359
|
.brain-v2 {
|
|
2360
|
+
flex: 0 0 auto;
|
|
2052
2361
|
height: auto;
|
|
2053
2362
|
min-height: 0;
|
|
2054
2363
|
}
|