@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.
Files changed (47) hide show
  1. package/README.md +64 -1
  2. package/dist/api/routes.js +337 -3
  3. package/dist/attest.d.ts +13 -0
  4. package/dist/attest.js +44 -0
  5. package/dist/capture.js +14 -5
  6. package/dist/cli.js +291 -6
  7. package/dist/context.d.ts +10 -1
  8. package/dist/context.js +105 -3
  9. package/dist/db.d.ts +141 -0
  10. package/dist/db.js +398 -0
  11. package/dist/embed.js +5 -14
  12. package/dist/estimate.d.ts +25 -1
  13. package/dist/estimate.js +36 -3
  14. package/dist/freshness.d.ts +7 -0
  15. package/dist/freshness.js +8 -1
  16. package/dist/hook.js +8 -1
  17. package/dist/hygiene.d.ts +26 -2
  18. package/dist/hygiene.js +42 -3
  19. package/dist/install/hosts.d.ts +15 -0
  20. package/dist/install/hosts.js +82 -4
  21. package/dist/install/skills.js +10 -5
  22. package/dist/kinds.d.ts +18 -0
  23. package/dist/kinds.js +80 -3
  24. package/dist/license.d.ts +1 -0
  25. package/dist/license.js +21 -19
  26. package/dist/mcp.js +221 -0
  27. package/dist/platforms.js +6 -0
  28. package/dist/policy.d.ts +6 -0
  29. package/dist/policy.js +16 -1
  30. package/dist/remember-contract.js +13 -4
  31. package/dist/repo-identity.d.ts +10 -0
  32. package/dist/repo-identity.js +20 -1
  33. package/dist/skill-capture.d.ts +43 -0
  34. package/dist/skill-capture.js +146 -0
  35. package/dist/skills.d.ts +106 -0
  36. package/dist/skills.js +422 -0
  37. package/docs/backlog.md +9 -0
  38. package/package.json +2 -1
  39. package/scripts/mcp-launch.sh +26 -0
  40. package/skills/amem-tasks/SKILL.md +100 -0
  41. package/skills/amem-write-skill/SKILL.md +99 -0
  42. package/templates/cursor-rule.mdc +16 -6
  43. package/templates/policy.deny-default.toml +5 -0
  44. package/templates/policy.example.toml +8 -0
  45. package/ui-static/app.js +458 -233
  46. package/ui-static/index.html +11 -34
  47. package/ui-static/styles.css +310 -1
@@ -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 = ["welcome", "setup", "dashboard", "brain", "analytics"];
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 welcomeDismissed = false;
147
- var paid = false;
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;
@@ -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
  }