keep-skill 0.8.1__tar.gz → 0.9.0__tar.gz
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.
- {keep_skill-0.8.1 → keep_skill-0.9.0}/PKG-INFO +4 -4
- {keep_skill-0.8.1 → keep_skill-0.9.0}/README.md +3 -3
- {keep_skill-0.8.1 → keep_skill-0.9.0}/SKILL.md +13 -30
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/api.py +22 -30
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/cli.py +9 -13
- {keep_skill-0.8.1 → keep_skill-0.9.0}/pyproject.toml +1 -1
- {keep_skill-0.8.1 → keep_skill-0.9.0}/.gitignore +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/LICENSE +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/__init__.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/__main__.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/chunking.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/config.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/context.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/data/__init__.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/data/system/__init__.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/data/system/conversations.md +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/data/system/domains.md +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/data/system/now.md +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/document_store.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/errors.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/indexing.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/logging_config.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/paths.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/pending_summaries.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/__init__.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/base.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/documents.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/embedding_cache.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/embeddings.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/llm.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/mlx.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/providers/summarization.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/store.py +0 -0
- {keep_skill-0.8.1 → keep_skill-0.9.0}/keep/types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: keep-skill
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Reflective memory - remember and search documents by meaning
|
|
5
5
|
Project-URL: Homepage, https://github.com/hughpyle/keep
|
|
6
6
|
Project-URL: Repository, https://github.com/hughpyle/keep
|
|
@@ -68,7 +68,7 @@ keep find "what's the rate limit?"
|
|
|
68
68
|
|
|
69
69
|
# Track what you're working on
|
|
70
70
|
keep now "Debugging auth flow"
|
|
71
|
-
keep now -V 1 # Previous
|
|
71
|
+
keep now -V 1 # Previous intentions
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
---
|
|
@@ -131,9 +131,9 @@ keep get ID --history # All versions
|
|
|
131
131
|
keep list --tag project=myapp # Find by tag
|
|
132
132
|
keep list --tags= # List all tag keys
|
|
133
133
|
|
|
134
|
-
# Current
|
|
134
|
+
# Current intentions
|
|
135
135
|
keep now # Show what you're working on
|
|
136
|
-
keep now "Fixing login bug" # Update
|
|
136
|
+
keep now "Fixing login bug" # Update intentions
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
### Python API
|
|
@@ -17,7 +17,7 @@ keep find "what's the rate limit?"
|
|
|
17
17
|
|
|
18
18
|
# Track what you're working on
|
|
19
19
|
keep now "Debugging auth flow"
|
|
20
|
-
keep now -V 1 # Previous
|
|
20
|
+
keep now -V 1 # Previous intentions
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
---
|
|
@@ -80,9 +80,9 @@ keep get ID --history # All versions
|
|
|
80
80
|
keep list --tag project=myapp # Find by tag
|
|
81
81
|
keep list --tags= # List all tag keys
|
|
82
82
|
|
|
83
|
-
# Current
|
|
83
|
+
# Current intentions
|
|
84
84
|
keep now # Show what you're working on
|
|
85
|
-
keep now "Fixing login bug" # Update
|
|
85
|
+
keep now "Fixing login bug" # Update intentions
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
### Python API
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: keep
|
|
3
|
-
version: 0.
|
|
3
|
+
version: 0.9.0
|
|
4
4
|
description: Reflective Memory
|
|
5
5
|
homepage: https://github.com/hughpyle/keep
|
|
6
6
|
runtime: python:3.12-slim
|
|
@@ -48,7 +48,7 @@ This work uses `keep` for memory and reflection, in order to become skillful.
|
|
|
48
48
|
**Practice:** Before acting, check what you know. After acting, capture what you learned.
|
|
49
49
|
|
|
50
50
|
\`\`\`bash
|
|
51
|
-
keep now # Current
|
|
51
|
+
keep now # Current intentions
|
|
52
52
|
keep find "topic" # What do I know?
|
|
53
53
|
keep update "learning" # Capture insight
|
|
54
54
|
\`\`\`
|
|
@@ -70,7 +70,7 @@ This skill provides memory. Use it — always, as practice. Be skillful.
|
|
|
70
70
|
|
|
71
71
|
Ground yourself:
|
|
72
72
|
1. What kind of conversation is this? (Action? Possibility? Clarification?)
|
|
73
|
-
2. Where am I? What
|
|
73
|
+
2. Where am I? What are my current intentions?
|
|
74
74
|
```bash
|
|
75
75
|
keep now
|
|
76
76
|
```
|
|
@@ -126,7 +126,7 @@ This table is a summary. The full framework includes the Language-Action Perspec
|
|
|
126
126
|
keep get "_system:conversations"
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
The conversations document is foundational. It teaches you to recognize where you are in work, what stance to take, and how to notice when things shift. Internalize it.
|
|
129
|
+
The 'conversations' document is foundational. It teaches you to recognize where you are in work, what stance to take, and how to notice when things shift. Internalize it.
|
|
130
130
|
|
|
131
131
|
### The Triple Check
|
|
132
132
|
|
|
@@ -146,7 +146,7 @@ keep update "Assumption was X, actually Y. Next time: Z" -t type=breakdown
|
|
|
146
146
|
|
|
147
147
|
**Do this now — index the source teaching:**
|
|
148
148
|
```bash
|
|
149
|
-
keep update "file://$PWD/docs/library/mn61.html" -t type=teaching -t topic=reflection
|
|
149
|
+
keep update "file://$PWD/docs/library/mn61.html" -t type=teaching -t topic=reflection
|
|
150
150
|
```
|
|
151
151
|
|
|
152
152
|
Then retrieve and read it:
|
|
@@ -178,7 +178,7 @@ You've read the core patterns (Layer 2). There's more foundational material.
|
|
|
178
178
|
**Do this now — read and index:**
|
|
179
179
|
```bash
|
|
180
180
|
keep get "_system:domains"
|
|
181
|
-
keep update "file://$PWD/docs/library/true_person_no_rank.md" -t type=teaching -t topic=commentary
|
|
181
|
+
keep update "file://$PWD/docs/library/true_person_no_rank.md" -t type=teaching -t topic=commentary
|
|
182
182
|
keep get "file://$PWD/docs/library/true_person_no_rank.md"
|
|
183
183
|
```
|
|
184
184
|
|
|
@@ -194,21 +194,21 @@ The [docs/library/](docs/library/) directory contains additional seed material.
|
|
|
194
194
|
|
|
195
195
|
## Layer 4: Efficient Use
|
|
196
196
|
|
|
197
|
-
### Track Your Current
|
|
197
|
+
### Track Your Current Intentions
|
|
198
198
|
|
|
199
199
|
Start each session by checking where you are:
|
|
200
200
|
```bash
|
|
201
201
|
keep now
|
|
202
202
|
```
|
|
203
203
|
|
|
204
|
-
Update it as your
|
|
204
|
+
Update it as your intentions change:
|
|
205
205
|
```bash
|
|
206
|
-
keep now "
|
|
206
|
+
keep now "Improving the authentication flow; keep it simple"
|
|
207
207
|
```
|
|
208
208
|
|
|
209
209
|
Check previous context if needed:
|
|
210
210
|
```bash
|
|
211
|
-
keep now -V 1 # Previous
|
|
211
|
+
keep now -V 1 # Previous intentions
|
|
212
212
|
keep now --history # All versions
|
|
213
213
|
```
|
|
214
214
|
|
|
@@ -299,8 +299,8 @@ Don't dump everything into context. Navigate the tree:
|
|
|
299
299
|
|
|
300
300
|
| Command | Purpose | Example |
|
|
301
301
|
|---------|---------|---------|
|
|
302
|
-
| `now` | Get/set current
|
|
303
|
-
| `now -V N` | Previous
|
|
302
|
+
| `now` | Get/set current intentions | `keep now` or `keep now "intention"` |
|
|
303
|
+
| `now -V N` | Previous intentions versions | `keep now -V 1` or `keep now --history` |
|
|
304
304
|
| `find` | Semantic similarity search | `keep find "authentication flow" --limit 5` |
|
|
305
305
|
| `find --id` | Find similar to existing item | `keep find --id "docid" --limit 3` |
|
|
306
306
|
| `search` | Full-text search in summaries | `keep search "OAuth"` |
|
|
@@ -315,24 +315,7 @@ Don't dump everything into context. Navigate the tree:
|
|
|
315
315
|
| `collections` | List all collections | `keep collections` |
|
|
316
316
|
| `init` | Initialize or verify store | `keep init` |
|
|
317
317
|
| `config` | Show configuration and store path | `keep config` |
|
|
318
|
-
| `process-pending` | Process
|
|
319
|
-
|
|
320
|
-
### Fast Indexing with `--lazy`
|
|
321
|
-
|
|
322
|
-
When using local models (MLX), summarization is slow. Use `--lazy` for fast indexing:
|
|
323
|
-
|
|
324
|
-
```bash
|
|
325
|
-
keep update "file:///path/to/doc.md" --lazy
|
|
326
|
-
keep update "insight" -t type=learning --lazy
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
The `--lazy` flag:
|
|
330
|
-
- Stores immediately with truncated placeholder
|
|
331
|
-
- Spawns background processor automatically
|
|
332
|
-
- Full summary generated asynchronously
|
|
333
|
-
- Search works immediately (embeddings are synchronous)
|
|
334
|
-
|
|
335
|
-
**Use `--lazy` when:** indexing many items, using local MLX models, or when you don't need the summary right away.
|
|
318
|
+
| `process-pending` | Process pending summaries | `keep process-pending --all` |
|
|
336
319
|
|
|
337
320
|
### Output
|
|
338
321
|
|
|
@@ -534,13 +534,17 @@ class Keeper:
|
|
|
534
534
|
summary: Optional[str] = None,
|
|
535
535
|
source_tags: Optional[dict[str, str]] = None, # Deprecated alias
|
|
536
536
|
collection: Optional[str] = None,
|
|
537
|
-
lazy: bool = False
|
|
538
537
|
) -> Item:
|
|
539
538
|
"""
|
|
540
539
|
Insert or update a document in the store.
|
|
541
540
|
|
|
542
541
|
Fetches the document, generates embeddings and summary, then stores it.
|
|
543
542
|
|
|
543
|
+
**Summary behavior:**
|
|
544
|
+
- If summary is provided, use it (skips auto-summarization)
|
|
545
|
+
- For large content, summarization is async (truncated placeholder
|
|
546
|
+
stored immediately, real summary generated in background)
|
|
547
|
+
|
|
544
548
|
**Update behavior:**
|
|
545
549
|
- Summary: Replaced with user-provided or newly generated summary
|
|
546
550
|
- Tags: Merged - existing tags are preserved, new tags override
|
|
@@ -553,9 +557,6 @@ class Keeper:
|
|
|
553
557
|
summary: User-provided summary (skips auto-summarization if given)
|
|
554
558
|
source_tags: Deprecated alias for 'tags'
|
|
555
559
|
collection: Target collection (uses default if None)
|
|
556
|
-
lazy: If True, use truncated placeholder summary and queue for
|
|
557
|
-
background processing. Use `process_pending()` to generate
|
|
558
|
-
real summaries later. Ignored if summary is provided.
|
|
559
560
|
|
|
560
561
|
Returns:
|
|
561
562
|
The stored Item with merged tags and new summary
|
|
@@ -615,17 +616,14 @@ class Keeper:
|
|
|
615
616
|
)
|
|
616
617
|
summary = summary[:max_len]
|
|
617
618
|
final_summary = summary
|
|
618
|
-
|
|
619
|
-
#
|
|
619
|
+
else:
|
|
620
|
+
# Large content: async summarization (truncated placeholder now, real summary later)
|
|
620
621
|
if len(doc.content) > max_len:
|
|
621
622
|
final_summary = doc.content[:max_len] + "..."
|
|
623
|
+
# Queue for background processing
|
|
624
|
+
self._pending_queue.enqueue(id, coll, doc.content)
|
|
622
625
|
else:
|
|
623
626
|
final_summary = doc.content
|
|
624
|
-
# Queue for background processing
|
|
625
|
-
self._pending_queue.enqueue(id, coll, doc.content)
|
|
626
|
-
else:
|
|
627
|
-
# Auto-generate summary
|
|
628
|
-
final_summary = self._get_summarization_provider().summarize(doc.content)
|
|
629
627
|
|
|
630
628
|
# Build tags: existing → config → env → user (later wins on collision)
|
|
631
629
|
merged_tags = {**existing_tags}
|
|
@@ -686,8 +684,8 @@ class Keeper:
|
|
|
686
684
|
tags=old_doc.tags,
|
|
687
685
|
)
|
|
688
686
|
|
|
689
|
-
# Spawn background processor if
|
|
690
|
-
if
|
|
687
|
+
# Spawn background processor if content was queued (large content, no user summary, content changed)
|
|
688
|
+
if summary is None and len(doc.content) > max_len and not content_unchanged:
|
|
691
689
|
self._spawn_processor()
|
|
692
690
|
|
|
693
691
|
# Return the stored item
|
|
@@ -703,7 +701,6 @@ class Keeper:
|
|
|
703
701
|
tags: Optional[dict[str, str]] = None,
|
|
704
702
|
source_tags: Optional[dict[str, str]] = None, # Deprecated alias
|
|
705
703
|
collection: Optional[str] = None,
|
|
706
|
-
lazy: bool = False
|
|
707
704
|
) -> Item:
|
|
708
705
|
"""
|
|
709
706
|
Store inline content directly (without fetching from a URI).
|
|
@@ -713,7 +710,8 @@ class Keeper:
|
|
|
713
710
|
**Smart summary behavior:**
|
|
714
711
|
- If summary is provided, use it (skips auto-summarization)
|
|
715
712
|
- If content is short (≤ max_summary_length), use content verbatim
|
|
716
|
-
-
|
|
713
|
+
- For large content, summarization is async (truncated placeholder
|
|
714
|
+
stored immediately, real summary generated in background)
|
|
717
715
|
|
|
718
716
|
**Update behavior (when id already exists):**
|
|
719
717
|
- Summary: Replaced with user-provided, content, or generated summary
|
|
@@ -728,9 +726,6 @@ class Keeper:
|
|
|
728
726
|
tags: User-provided tags to merge with existing tags
|
|
729
727
|
source_tags: Deprecated alias for 'tags'
|
|
730
728
|
collection: Target collection (uses default if None)
|
|
731
|
-
lazy: If True and content is long, use truncated placeholder summary
|
|
732
|
-
and queue for background processing. Ignored if content is
|
|
733
|
-
short or summary is provided.
|
|
734
729
|
|
|
735
730
|
Returns:
|
|
736
731
|
The stored Item with merged tags and new summary
|
|
@@ -794,14 +789,11 @@ class Keeper:
|
|
|
794
789
|
elif len(content) <= max_len:
|
|
795
790
|
# Content is short enough - use verbatim (smart summary)
|
|
796
791
|
final_summary = content
|
|
797
|
-
|
|
798
|
-
# Content is long
|
|
792
|
+
else:
|
|
793
|
+
# Content is long - async summarization (truncated placeholder now, real summary later)
|
|
799
794
|
final_summary = content[:max_len] + "..."
|
|
800
795
|
# Queue for background processing
|
|
801
796
|
self._pending_queue.enqueue(id, coll, content)
|
|
802
|
-
else:
|
|
803
|
-
# Content is long - generate summary
|
|
804
|
-
final_summary = self._get_summarization_provider().summarize(content)
|
|
805
797
|
|
|
806
798
|
# Build tags: existing → config → env → user (later wins on collision)
|
|
807
799
|
merged_tags = {**existing_tags}
|
|
@@ -860,8 +852,8 @@ class Keeper:
|
|
|
860
852
|
tags=old_doc.tags,
|
|
861
853
|
)
|
|
862
854
|
|
|
863
|
-
# Spawn background processor if
|
|
864
|
-
if
|
|
855
|
+
# Spawn background processor if content was queued (large content, no user summary, content changed)
|
|
856
|
+
if summary is None and len(content) > max_len and not content_unchanged:
|
|
865
857
|
self._spawn_processor()
|
|
866
858
|
|
|
867
859
|
# Return the stored item
|
|
@@ -1366,14 +1358,14 @@ class Keeper:
|
|
|
1366
1358
|
|
|
1367
1359
|
def get_now(self) -> Item:
|
|
1368
1360
|
"""
|
|
1369
|
-
Get the current working
|
|
1361
|
+
Get the current working intentions.
|
|
1370
1362
|
|
|
1371
1363
|
A singleton document representing what you're currently working on.
|
|
1372
1364
|
If it doesn't exist, creates one with default content and tags from
|
|
1373
1365
|
the bundled system now.md file.
|
|
1374
1366
|
|
|
1375
1367
|
Returns:
|
|
1376
|
-
The current
|
|
1368
|
+
The current intentions Item (never None - auto-creates if missing)
|
|
1377
1369
|
"""
|
|
1378
1370
|
item = self.get(NOWDOC_ID)
|
|
1379
1371
|
if item is None:
|
|
@@ -1394,13 +1386,13 @@ class Keeper:
|
|
|
1394
1386
|
tags: Optional[dict[str, str]] = None,
|
|
1395
1387
|
) -> Item:
|
|
1396
1388
|
"""
|
|
1397
|
-
Set the current working
|
|
1389
|
+
Set the current working intentions.
|
|
1398
1390
|
|
|
1399
|
-
Updates the singleton
|
|
1391
|
+
Updates the singleton intentions with new content. Uses remember()
|
|
1400
1392
|
internally with the fixed NOWDOC_ID.
|
|
1401
1393
|
|
|
1402
1394
|
Args:
|
|
1403
|
-
content: New content for the current
|
|
1395
|
+
content: New content for the current intentions
|
|
1404
1396
|
tags: Optional additional tags to apply
|
|
1405
1397
|
|
|
1406
1398
|
Returns:
|
|
@@ -251,7 +251,7 @@ def main_callback(
|
|
|
251
251
|
)] = None,
|
|
252
252
|
):
|
|
253
253
|
"""Reflective memory with semantic search."""
|
|
254
|
-
# If no subcommand provided, show the current
|
|
254
|
+
# If no subcommand provided, show the current intentions (now)
|
|
255
255
|
if ctx.invoked_subcommand is None:
|
|
256
256
|
from .api import NOWDOC_ID
|
|
257
257
|
kp = _get_keeper(None, "default")
|
|
@@ -683,10 +683,6 @@ def update(
|
|
|
683
683
|
"--summary",
|
|
684
684
|
help="User-provided summary (skips auto-summarization)"
|
|
685
685
|
)] = None,
|
|
686
|
-
lazy: Annotated[bool, typer.Option(
|
|
687
|
-
"--lazy",
|
|
688
|
-
help="Fast mode: use truncated summary, queue for later processing"
|
|
689
|
-
)] = False,
|
|
690
686
|
):
|
|
691
687
|
"""
|
|
692
688
|
Add or update a document in the store.
|
|
@@ -715,15 +711,15 @@ def update(
|
|
|
715
711
|
parsed_tags = {**frontmatter_tags, **parsed_tags} # CLI tags override
|
|
716
712
|
# Use content-addressed ID for stdin text (enables versioning)
|
|
717
713
|
doc_id = id or _text_content_id(content)
|
|
718
|
-
item = kp.remember(content, id=doc_id, summary=summary, tags=parsed_tags or None
|
|
714
|
+
item = kp.remember(content, id=doc_id, summary=summary, tags=parsed_tags or None)
|
|
719
715
|
elif source and _URI_SCHEME_PATTERN.match(source):
|
|
720
716
|
# URI mode: fetch from URI (ID is the URI itself)
|
|
721
|
-
item = kp.update(source, tags=parsed_tags or None, summary=summary
|
|
717
|
+
item = kp.update(source, tags=parsed_tags or None, summary=summary)
|
|
722
718
|
elif source:
|
|
723
719
|
# Text mode: inline content (no :// in source)
|
|
724
720
|
# Use content-addressed ID for text (enables versioning)
|
|
725
721
|
doc_id = id or _text_content_id(source)
|
|
726
|
-
item = kp.remember(source, id=doc_id, summary=summary, tags=parsed_tags or None
|
|
722
|
+
item = kp.remember(source, id=doc_id, summary=summary, tags=parsed_tags or None)
|
|
727
723
|
else:
|
|
728
724
|
typer.echo("Error: Provide content, URI, or '-' for stdin", err=True)
|
|
729
725
|
raise typer.Exit(1)
|
|
@@ -760,15 +756,15 @@ def now(
|
|
|
760
756
|
)] = None,
|
|
761
757
|
):
|
|
762
758
|
"""
|
|
763
|
-
Get or set the current working
|
|
759
|
+
Get or set the current working intentions.
|
|
764
760
|
|
|
765
|
-
With no arguments, displays the current
|
|
761
|
+
With no arguments, displays the current intentions.
|
|
766
762
|
With content, replaces it.
|
|
767
763
|
|
|
768
764
|
\b
|
|
769
765
|
Examples:
|
|
770
|
-
keep now # Show current
|
|
771
|
-
keep now "What's important now" # Update
|
|
766
|
+
keep now # Show current intentions
|
|
767
|
+
keep now "What's important now" # Update intentions
|
|
772
768
|
keep now -f context.md # Read content from file
|
|
773
769
|
keep now --reset # Reset to default from system
|
|
774
770
|
keep now -V 1 # Previous version
|
|
@@ -891,7 +887,7 @@ def now(
|
|
|
891
887
|
item = kp.set_now(new_content, tags=parsed_tags or None)
|
|
892
888
|
typer.echo(_format_item(item, as_json=_get_json_output()))
|
|
893
889
|
else:
|
|
894
|
-
# Get current
|
|
890
|
+
# Get current intentions with version navigation and similar items
|
|
895
891
|
item = kp.get_now()
|
|
896
892
|
version_nav = kp.get_version_nav(NOWDOC_ID, None, collection=collection)
|
|
897
893
|
similar_items = kp.get_similar_for_display(NOWDOC_ID, limit=3, collection=collection)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|