json-object-editor 0.10.509 → 0.10.521

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/CHANGELOG.md +35 -0
  2. package/_www/mcp-export.html +11 -4
  3. package/_www/mcp-nav.js +8 -4
  4. package/_www/mcp-prompt.html +96 -121
  5. package/_www/mcp-schemas.html +294 -0
  6. package/_www/mcp-test.html +86 -0
  7. package/docs/JOE_Master_Knowledge_Export.md +135 -0
  8. package/docs/joe_agent_custom_gpt_instructions_v_2.md +54 -0
  9. package/docs/joe_agent_spec_v_2.2.md +64 -0
  10. package/docs/schema_summary_guidelines.md +128 -0
  11. package/package.json +1 -1
  12. package/readme.md +525 -469
  13. package/server/modules/MCP.js +606 -405
  14. package/server/modules/Schemas.js +321 -111
  15. package/server/modules/Server.js +26 -15
  16. package/server/modules/Storage.js +9 -0
  17. package/server/relationships.graph.json +5 -0
  18. package/server/schemas/block.js +37 -0
  19. package/server/schemas/board.js +2 -1
  20. package/server/schemas/budget.js +28 -1
  21. package/server/schemas/event.js +42 -0
  22. package/server/schemas/financial_account.js +35 -0
  23. package/server/schemas/goal.js +30 -0
  24. package/server/schemas/group.js +31 -0
  25. package/server/schemas/include.js +28 -0
  26. package/server/schemas/ingredient.js +28 -0
  27. package/server/schemas/initiative.js +32 -0
  28. package/server/schemas/instance.js +31 -1
  29. package/server/schemas/layout.js +31 -0
  30. package/server/schemas/ledger.js +30 -0
  31. package/server/schemas/list.js +33 -0
  32. package/server/schemas/meal.js +30 -0
  33. package/server/schemas/note.js +30 -0
  34. package/server/schemas/notification.js +33 -1
  35. package/server/schemas/page.js +43 -0
  36. package/server/schemas/post.js +32 -0
  37. package/server/schemas/project.js +36 -0
  38. package/server/schemas/recipe.js +32 -0
  39. package/server/schemas/report.js +32 -0
  40. package/server/schemas/setting.js +22 -0
  41. package/server/schemas/site.js +30 -0
  42. package/server/schemas/status.js +33 -0
  43. package/server/schemas/tag.js +28 -1
  44. package/server/schemas/task.js +778 -737
  45. package/server/schemas/transaction.js +43 -0
  46. package/server/schemas/user.js +36 -1
  47. package/server/schemas/workflow.js +30 -1
@@ -3,6 +3,48 @@ var schema = function(){
3
3
  title : '${name}',
4
4
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-7 -7 40 40"><path d="M6 2L6 4 5 4C3.9 4 3 4.9 3 6L3 20C3 21.1 3.9 22 5 22L19 22C20.1 22 21 21.1 21 20L21 6C21 4.9 20.1 4 19 4L18 4 18 2 16 2 16 4 8 4 8 2 6 2zM5 9L19 9 19 20 5 20 5 9zM12 13L12 18 17 18 17 13 12 13z"/></svg>',
5
5
  default_schema:true,
6
+ // Curated summary for agents
7
+ summary:{
8
+ description:'Scheduled occurrence with date/time, location, and attendees.',
9
+ purpose:'Events capture meetings or occurrences with optional leader and attendees. Use events for calendars, reminders, and participation tracking.',
10
+ labelField:'name',
11
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
12
+ searchableFields:['name','info','description','city','state','street_address','zip','_id'],
13
+ allowedSorts:['joeUpdated','created','date','start_time','end_time','name'],
14
+ relationships:{
15
+ outbound:[
16
+ { field:'status', targetSchema:'status', cardinality:'one' },
17
+ { field:'leader', targetSchema:'user', cardinality:'one' },
18
+ { field:'attendees', targetSchema:'user', cardinality:'many' },
19
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
20
+ ],
21
+ inbound:{ graphRef:'server/relationships.graph.json' }
22
+ },
23
+ joeManagedFields:['created','joeUpdated'],
24
+ fields:[
25
+ { name:'_id', type:'string', required:true },
26
+ { name:'itemtype', type:'string', required:true, const:'event' },
27
+ { name:'name', type:'string', required:true },
28
+ { name:'info', type:'string' },
29
+ { name:'date', type:'string', format:'date' },
30
+ { name:'start_time', type:'string' },
31
+ { name:'end_time', type:'string' },
32
+ { name:'timezone_offset', type:'string' },
33
+ { name:'street_address', type:'string' },
34
+ { name:'city', type:'string' },
35
+ { name:'state', type:'string' },
36
+ { name:'zip', type:'string' },
37
+ { name:'status', type:'string', isReference:true, targetSchema:'status' },
38
+ { name:'leader', type:'string', isReference:true, targetSchema:'user' },
39
+ { name:'attendees', type:'string', isArray:true, isReference:true, targetSchema:'user' },
40
+ { name:'published', type:'boolean' },
41
+ { name:'published_ts', type:'string', format:'date-time' },
42
+ { name:'description', type:'string' },
43
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
44
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
45
+ { name:'created', type:'string', format:'date-time', required:true }
46
+ ]
47
+ },
6
48
  listView:{
7
49
  title:function(e){
8
50
  /*var html = '<joe-full-right>'
@@ -4,6 +4,41 @@ var schema = {
4
4
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-15 -15 80 80"><path d="M23.6 1C22.1 1 21.1 2.2 20.4 3.2 19.7 4.2 18.6 4.2 16.6 4.2 15.5 4.2 14.1 4.3 13.3 4.9 14.6 7 16.2 8.6 17.7 9 18.5 9.3 19.2 9.1 19.8 8.6 20.7 7.7 21.8 6.7 23.1 6.8 24.1 6.9 24.9 7.5 25.9 8.7 26.1 8.9 26.3 9 26.6 9 27.1 9.1 27.8 8.8 28.3 8.3 28.9 7.7 29.6 7.2 30.3 6.6 31.4 5.7 33.5 4.1 33.8 3.3 33.5 3.1 33.1 3 32.5 3 31.7 3 30.9 3.2 30.2 3.4 29.5 3.5 28.9 3.7 28.4 3.7 28 3.7 27.7 3.6 27.4 3.3 25.9 1.7 24.7 1 23.6 1ZM34.3 5.8C33.6 6.6 32.6 7.3 31.5 8.2 30.9 8.7 30.2 9.3 29.7 9.8 28.7 10.6 27.5 11.1 26.4 11 25.6 11 24.9 10.6 24.3 9.9 23.6 9 23.1 8.8 23 8.8 22.5 8.8 21.7 9.5 21.1 10.1 20.3 10.8 19.4 11.1 18.4 11.1 18 11.1 17.6 11.1 17.2 10.9 16.4 10.7 15.6 10.3 14.8 9.7 15.8 10.7 17.2 12.6 17.4 15.2 19.5 16.4 24.3 18.6 29.9 15.4 30.2 15.3 30.6 15 31 14.7 31 14.7 31.1 14.7 31.1 14.7 30.8 10.9 33 8.1 33.3 7.7L33.4 7.6C33.7 7.1 34.1 6.4 34.3 5.8ZM38.2 12C36.3 11.9 34.5 12.6 33.1 13.4 33.1 13.7 33.1 14 33.1 14.3 33.5 14.5 34 14.7 34.4 14.9 36.5 15.9 38.6 17.3 40.4 19 40.5 19 40.5 19 40.5 19 40.7 19 41 18.9 41.2 18.7 41.6 18.3 41.6 17.7 41.2 17.3 39.5 15.5 37.4 14.7 35.3 14.5 36.9 13.9 38.9 13.7 41 14.9 41.5 15.1 42.1 15 42.4 14.5 42.6 14 42.5 13.4 42 13.1 40.6 12.4 39.4 12.1 38.2 12ZM32.4 16.2C32.3 16.2 32.2 16.3 32.1 16.4 31.7 16.7 31.3 16.9 30.9 17.2 28.4 18.5 26.1 19.1 24 19.1 20.4 19.1 17.5 17.6 16 16.7 9.7 19.4 4 27.3 4 34.1 4 45 11.1 47 25 47 38.9 47 46 45 46 34.1 46 26 39.3 18.9 32.4 16.2ZM23.5 22L25.3 22 25.3 24.1C27.9 24.6 28.8 26.4 29.3 28.4L27.5 28.4C27.2 27 26.3 25.8 24.4 25.8 21.7 25.8 21.4 27.6 21.4 28.4 21.4 30.3 23.2 30.7 25.1 31.2 27.5 31.8 29.9 32.6 29.9 35.6 29.9 39.2 26.7 40.2 25.3 40.3L25.3 42 23.5 42 23.5 40.3C22 40 19.3 39.1 19 35.2L20.8 35.2C20.8 36.4 21.6 38.6 24.4 38.6 27.1 38.6 27.8 37.3 27.8 35.8 27.8 31.4 19.4 34.4 19.4 28.6 19.4 25.4 22 24.2 23.5 24Z"/></svg>',
5
5
 
6
6
  info:"A financial account like credit, savings, checking or loan.",
7
+ // Curated summary for agents
8
+ summary:{
9
+ description:'Bank/credit/loan account; may connect to external providers and ledgers.',
10
+ purpose:'Use to represent money accounts. Supports Plaid linkage, default account flag, ledger visibility, type, tags, and members.',
11
+ labelField:'name',
12
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
13
+ searchableFields:['name','info','code','_id'],
14
+ allowedSorts:['joeUpdated','created','name','financial_account_type'],
15
+ relationships:{
16
+ outbound:[
17
+ { field:'tags', targetSchema:'tag', cardinality:'many' },
18
+ { field:'members', targetSchema:'user', cardinality:'many' }
19
+ ],
20
+ inbound:{ graphRef:'server/relationships.graph.json' }
21
+ },
22
+ joeManagedFields:['created','joeUpdated'],
23
+ fields:[
24
+ { name:'_id', type:'string', required:true },
25
+ { name:'itemtype', type:'string', required:true, const:'financial_account' },
26
+ { name:'name', type:'string', required:true },
27
+ { name:'info', type:'string' },
28
+ { name:'code', type:'string' },
29
+ { name:'default_account', type:'boolean' },
30
+ { name:'description', type:'string' },
31
+ { name:'plaid_id', type:'string' },
32
+ { name:'access_token', type:'string' },
33
+ { name:'account_id', type:'string' },
34
+ { name:'ledger_account', type:'boolean' },
35
+ { name:'financial_account_type', type:'string', enumValues:['checking','savings','credit'] },
36
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
37
+ { name:'members', type:'string', isArray:true, isReference:true, targetSchema:'user' },
38
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
39
+ { name:'created', type:'string', format:'date-time', required:true }
40
+ ]
41
+ },
7
42
  listView:{
8
43
  title: '<joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle><joe-subtext>${code}</joe-subtext>',
9
44
  listWindowTitle: 'Accounts',
@@ -2,6 +2,36 @@ var schema = {
2
2
  title : '${name}',
3
3
  info:"In your group working towards realizing a specific outcome? Track it with goals.",
4
4
  default_schema:true,
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Outcome to achieve; referenced by projects and aligned planning.',
8
+ purpose:'Goals define measurable outcomes and can be aligned to projects or groups. Use goal to plan and report on strategic objectives; projects may list aligned goals.',
9
+ labelField:'name',
10
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
11
+ searchableFields:['name','info','code','_id'],
12
+ allowedSorts:['joeUpdated','created','name','priority','group'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'group', targetSchema:'group', cardinality:'one' },
16
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
17
+ ],
18
+ inbound:{ graphRef:'server/relationships.graph.json' }
19
+ },
20
+ joeManagedFields:['created','joeUpdated'],
21
+ fields:[
22
+ { name:'_id', type:'string', required:true },
23
+ { name:'itemtype', type:'string', required:true, const:'goal' },
24
+ { name:'name', type:'string', required:true },
25
+ { name:'code', type:'string' },
26
+ { name:'info', type:'string' },
27
+ { name:'description', type:'string' },
28
+ { name:'group', type:'string', isReference:true, targetSchema:'group' },
29
+ { name:'milestones', type:'objectList' },
30
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
31
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
32
+ { name:'created', type:'string', format:'date-time', required:true }
33
+ ]
34
+ },
5
35
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-120 -120 720 720"><path d="M476.6 83.8c-0.7-2.7-2.9-4.6-6-5.4l-34.3-8.7c-0.9-0.2-2.2-1.6-2.5-2.5L425.2 33c-1-3.8-3.8-6.2-7.3-6.2 -2.1 0-4.2 0.9-5.8 2.6L381.4 60c-2.6 2.6-5.2 7.4-5.9 11l-7.3 37.6c-0.3 1.7-0.3 3.5 0.1 5.2l-20.2 20.2c-32.4-29-75.2-46.7-122-46.7 -100.9 0-183 82.1-183 183s82.1 183 183 183 183-82.1 183-183c0-43.3-15.1-83.1-40.3-114.4l20.7-20.7c1 0.2 2 0.3 3.1 0.3 0.8 0 1.6-0.1 2.3-0.2l37.6-7.3c3.7-0.7 8.4-3.2 11-5.9l30.7-30.7C476.5 89.2 477.3 86.4 476.6 83.8zM285.1 270.3c0 32.5-26.4 58.9-58.9 58.9 -32.5 0-58.9-26.4-58.9-58.9 0-32.5 26.4-58.9 58.9-58.9 5.5 0 10.9 0.8 16 2.2l-8.2 25c-2.5-0.6-5.1-0.9-7.8-0.9 -18 0-32.7 14.7-32.7 32.7s14.7 32.7 32.7 32.7c17.5 0 31.8-13.8 32.7-31.1l25.8-9.1C284.9 265.3 285.1 267.8 285.1 270.3zM295.3 186.7c-18.8-15.6-42.9-25-69.2-25 -59.9 0-108.6 48.7-108.6 108.6s48.7 108.5 108.6 108.5 108.6-48.7 108.6-108.5c0-22.8-7.1-43.9-19.1-61.4l20.3-20.3c17 22.8 27.1 51.1 27.1 81.7 0 75.5-61.4 136.9-136.9 136.9S89.2 345.8 89.2 270.3s61.4-136.9 136.9-136.9c34.1 0 65.3 12.5 89.3 33.2L295.3 186.7z"/></svg>',
6
36
  listView:{
7
37
  title: '<joe-subtitle>${code}</joe-subtitle><joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle>',
@@ -2,6 +2,37 @@ var schema = {
2
2
  title : '${name}',
3
3
  menuinfo:"Organize users into a group with shared goals and specify leaders. Can also be used to protect all group items",
4
4
  default_schema:true,
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Collection of users with shared membership and access context.',
8
+ purpose:'Groups organize users for permissions, team scoping, filtering, and reporting. Projects and goals can reference groups; users are members of groups. Use group to segment access and to aggregate users by function.',
9
+ labelField:'name',
10
+ defaultSort:{ field:'name', dir:'asc' },
11
+ searchableFields:['name','info','description','code','_id'],
12
+ allowedSorts:['name','joeUpdated','created','code'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'leader', targetSchema:'user', cardinality:'one' },
16
+ { field:'members', targetSchema:'user', cardinality:'many' },
17
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
18
+ ],
19
+ inbound:{ graphRef:'server/relationships.graph.json' }
20
+ },
21
+ joeManagedFields:['created','joeUpdated'],
22
+ fields:[
23
+ { name:'_id', type:'string', required:true },
24
+ { name:'itemtype', type:'string', required:true, const:'group' },
25
+ { name:'name', type:'string', required:true },
26
+ { name:'info', type:'string' },
27
+ { name:'description', type:'string' },
28
+ { name:'code', type:'string' },
29
+ { name:'leader', type:'string', isReference:true, targetSchema:'user' },
30
+ { name:'members', type:'string', isArray:true, isReference:true, targetSchema:'user' },
31
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
32
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
33
+ { name:'created', type:'string', format:'date-time', required:true }
34
+ ]
35
+ },
5
36
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -10 46 46"><path d="M9 1C7.3 1 6 2.3 6 4 6 5.7 7.3 7 9 7 10.7 7 12 5.7 12 4 12 2.3 10.7 1 9 1zM9 7C8.7 7 8.4 7 8.1 7.1 8.7 7.9 9 8.9 9 10 9 10.4 8.9 10.8 8.9 11.2 9.7 10 11 9.2 12.5 9 11.8 7.8 10.5 7 9 7zM17 1C15.3 1 14 2.3 14 4 14 5.7 15.3 7 17 7 18.7 7 20 5.7 20 4 20 2.3 18.7 1 17 1zM17 7C15.5 7 14.2 7.8 13.5 9 15 9.2 16.3 10 17.1 11.2 17.1 10.8 17 10.4 17 10 17 8.9 17.3 7.9 17.9 7.1 17.6 7 17.3 7 17 7zM4 7C2.3 7 1 8.3 1 10 1 11.7 2.3 13 4 13 5.7 13 7 11.7 7 10 7 8.3 5.7 7 4 7zM4 13C1.8 13 0 14.8 0 17L0 19.2C0 19.2 1 20 4 20 7 20 8 19.2 8 19.2L8 17C8 14.8 6.2 13 4 13zM22 7C20.3 7 19 8.3 19 10 19 11.7 20.3 13 22 13 23.7 13 25 11.7 25 10 25 8.3 23.7 7 22 7zM22 13C19.8 13 18 14.8 18 17L18 19.2C18 19.2 19 20 22 20 25 20 26 19.2 26 19.2L26 17C26 14.8 24.2 13 22 13zM13 11C11.3 11 10 12.3 10 14 10 15.7 11.3 17 13 17 14.7 17 16 15.7 16 14 16 12.3 14.7 11 13 11zM13 17C10.8 17 9 18.8 9 21L9 23.2C9 23.2 10 24 13 24 16 24 17 23.2 17 23.2L17 21C17 18.8 15.2 17 13 17z"/></svg>',
6
37
  listView:{
7
38
  title:
@@ -3,6 +3,34 @@ var user = function(){return{
3
3
  default_schema:true,
4
4
  info:"Use an include to store a piece of javascript or css that you can reference throughout your site.",
5
5
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-16 -16 82 82"><path d="M29.1 7.3L17.1 41.3 20.9 42.7 32.9 8.7 29.1 7.3zM9.9 13.4L1.3 23.7 0.2 25 1.3 26.3 9.9 36.7 13 34.1 5.4 25 13 15.9 9.9 13.4zM40.1 13.4L37 15.9 44.6 25 37 34.1 40.1 36.6 48.7 26.3 49.8 25 48.7 23.7 40.1 13.4z"/></svg>',
6
+ // Curated summary for agents
7
+ summary:{
8
+ description:'Reusable code asset (JS/CSS) served to sites and templates.',
9
+ purpose:'Includes store script or stylesheet content by filetype. They can be referenced in layouts/pages or fetched via a public endpoint.',
10
+ labelField:'name',
11
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
12
+ searchableFields:['name','info','filetype','_id'],
13
+ allowedSorts:['joeUpdated','created','name','filetype'],
14
+ relationships:{
15
+ outbound:[
16
+ { field:'site', targetSchema:'site', cardinality:'one' }
17
+ ],
18
+ inbound:{ graphRef:'server/relationships.graph.json' }
19
+ },
20
+ joeManagedFields:['created','joeUpdated'],
21
+ fields:[
22
+ { name:'_id', type:'string', required:true },
23
+ { name:'itemtype', type:'string', required:true, const:'include' },
24
+ { name:'name', type:'string', required:true },
25
+ { name:'info', type:'string' },
26
+ { name:'content', type:'string' },
27
+ { name:'filetype', type:'string', enumValues:['js','css'] },
28
+ { name:'fillTemplate', type:'boolean' },
29
+ { name:'site', type:'string', isReference:true, targetSchema:'site' },
30
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
31
+ { name:'created', type:'string', format:'date-time', required:true }
32
+ ]
33
+ },
6
34
  listView:{
7
35
  title: '<joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle><joe-subtext>${filetype}</joe-subtext>',
8
36
  listWindowTitle: 'Includes'
@@ -1,6 +1,34 @@
1
1
  var schema = {
2
2
  title : '${name}',
3
3
  info:'An item to be purchased and added to recipes or eaten as a standalone.',
4
+ // Curated summary for agents
5
+ summary:{
6
+ description:'Food item used in recipes; can optionally act as a standalone recipe.',
7
+ purpose:'Use ingredients as reusable building blocks for recipes and meal planning. Tracks usage in recipes and supports tags and files.',
8
+ labelField:'name',
9
+ defaultSort:{ field:'name', dir:'asc' },
10
+ searchableFields:['name','info','_id'],
11
+ allowedSorts:['name','joeUpdated','created','__usagecount'],
12
+ relationships:{
13
+ outbound:[
14
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
15
+ ],
16
+ inbound:{ graphRef:'server/relationships.graph.json' }
17
+ },
18
+ joeManagedFields:['created','joeUpdated'],
19
+ fields:[
20
+ { name:'_id', type:'string', required:true },
21
+ { name:'itemtype', type:'string', required:true, const:'ingredient' },
22
+ { name:'name', type:'string', required:true },
23
+ { name:'info', type:'string' },
24
+ { name:'description', type:'string' },
25
+ { name:'files', type:'string', isArray:true },
26
+ { name:'mealtype', type:'string' },
27
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
28
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
29
+ { name:'created', type:'string', format:'date-time', required:true }
30
+ ]
31
+ },
4
32
  listView:{
5
33
  title: function(ing){
6
34
  var usages = ing.__usagecount == 1? ing.__usagecount+' usage':ing.__usagecount+' usages';
@@ -2,6 +2,38 @@ var schema = {
2
2
  title : '${name}',
3
3
  info:"An initiative is a particular group of work (projects and tasks) that align to larger goals of an group.",
4
4
  default_schema:true,
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Program of work aligning projects/tasks toward goals for a group.',
8
+ purpose:'Use initiatives to organize related delivery efforts under a theme. They reference a group and can be tagged and aligned to goals/areas.',
9
+ labelField:'name',
10
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
11
+ searchableFields:['name','info','description','_id'],
12
+ allowedSorts:['joeUpdated','created','name','priority','group'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'group', targetSchema:'group', cardinality:'one' },
16
+ { field:'areas', targetSchema:'goal', cardinality:'many' },
17
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
18
+ ],
19
+ inbound:{ graphRef:'server/relationships.graph.json' }
20
+ },
21
+ joeManagedFields:['created','joeUpdated'],
22
+ fields:[
23
+ { name:'_id', type:'string', required:true },
24
+ { name:'itemtype', type:'string', required:true, const:'initiative' },
25
+ { name:'name', type:'string', required:true },
26
+ { name:'info', type:'string' },
27
+ { name:'description', type:'string' },
28
+ { name:'group', type:'string', isReference:true, targetSchema:'group' },
29
+ { name:'areas', type:'string', isArray:true, isReference:true, targetSchema:'goal' },
30
+ { name:'goals', type:'objectList' },
31
+ { name:'priority', type:'number', enumValues:[1,2,3,1000] },
32
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
33
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
34
+ { name:'created', type:'string', format:'date-time', required:true }
35
+ ]
36
+ },
5
37
  menuicon:'<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="-100 -100 712 712" style="enable-background:new 0 0 512 512" xml:space="preserve"><style>.st0{fill:#fff}</style><path class="st0" d="M-1712 1169V919h460c-8.39 1.01-16.86 1.59-25.16 3.12-15.63 2.87-31.16 6.29-46.57 9.44 3.77 53.27 58.38 108.05 112.13 110.96 2.52-12.06 5.42-24.17 7.49-36.43 1.85-10.95 2.77-22.06 4.1-33.09v458h-248c2.74-1.8 5.87-3.2 8.15-5.46 15.38-15.22 31-30.23 45.72-46.08 17.59-18.95 28.12-41.47 29.69-67.57.32-5.25-1.11-10.61-1.85-16.96-3.49 2.5-5.58 4.12-7.79 5.56-25.74 16.83-51.33 33.9-77.37 50.27-6.74 4.23-10.54 7.38-10.12 16.78.61 13.63-2.12 27.45-3.94 41.12-1.64 12.28-.05 16.31 10.52 22.34h-257v-256c5.83 11.17 10.3 13.16 22.96 10.21 1.29-.3 2.59-.6 3.89-.9 14.64-3.42 29.41-5.95 44.47-4.04 3.46.44 4.97-.28 6.58-3.14 17.23-30.44 36.33-59.67 57.33-87.64.73-.98 1.27-2.1 2.67-4.46-6.15-.77-11.35-2.1-16.5-1.96-24.33.64-45.46 10.38-63.35 25.98-17.41 15.18-33.39 32.01-49.75 48.36-3.33 3.31-5.57 7.7-8.3 11.59zm358.02-225.49c-.49.18-1.45.46-2.36.85-36.12 15.36-68.96 36.09-99.25 60.92-56.83 46.57-101.92 103.1-140.16 165.45-1.51 2.46-1.36 3.89.71 5.91 9.54 9.31 18.96 18.74 28.27 28.28 2.17 2.22 3.94 2.27 6.93 1.59 9.99-2.29 20.09-5.1 30.24-5.56 26.93-1.21 46.09 16.82 47.72 43.67.72 11.82-1.47 23.21-5.64 34.22-.97 2.57-1.07 4.36 1.18 6.54 10.05 9.74 19.92 19.66 29.71 29.66 2 2.05 3.39 2.28 5.89.74 46.11-28.36 89.5-60.27 128.21-98.27 36.88-36.2 68.32-76.43 90.8-123.24 3.42-7.12 6.38-14.47 9.39-21.33-70.17-16.97-113.42-60.27-131.64-129.43zm-157.53 308.43c.09-15.91-6.34-22.26-20.07-21.39-16.29 1.04-30.23 7.72-41.62 19.27-9.82 9.96-19.45 20.13-28.68 30.64-18.28 20.8-35.2 42.62-47.9 67.4-3.83 7.46-3.05 14.48 1.94 19.35 4.89 4.77 11.76 5.58 18.95 1.8 6.03-3.17 12.01-6.5 17.75-10.15 30.12-19.15 56.4-42.95 81.53-68.06 11.2-11.2 17.23-25.1 18.1-38.86zm-37.04 97.84c7.02 8.97 13.53 11.6 21.78 7.54 15.31-7.54 30.34-15.65 45.12-23.33-8.27-8.27-16.32-16.32-24.11-24.1-13.85 12.92-28.19 26.28-42.79 39.89zm-42.56-124.99c-7.54-7.6-15.11-15.22-22.86-23.04-7.54 14.68-15.46 29.64-22.92 44.83-4.08 8.3-1.43 15.84 6.25 20.77 13.37-14.39 26.72-28.76 39.53-42.56z"/><path d="M-1200 973c-1.33 11.04-2.26 22.14-4.1 33.09-2.07 12.25-4.97 24.36-7.49 36.43-53.75-2.91-108.36-57.69-112.13-110.96 15.41-3.16 30.94-6.57 46.57-9.44 8.3-1.52 16.77-2.11 25.16-3.12h31c1.44.27 2.88.65 4.34.78 10.11.87 15.19 6 15.84 15.97.11 1.76.54 3.5.82 5.25-.01 10.67-.01 21.33-.01 32zM-1712 1169c2.73-3.89 4.97-8.28 8.29-11.59 16.37-16.35 32.35-33.18 49.75-48.36 17.89-15.6 39.02-25.34 63.35-25.98 5.16-.14 10.36 1.19 16.5 1.96-1.4 2.35-1.94 3.48-2.67 4.46-21 27.98-40.1 57.2-57.33 87.64-1.61 2.85-3.12 3.57-6.58 3.14-15.06-1.91-29.83.62-44.47 4.04-1.29.3-2.59.6-3.89.9-12.66 2.94-17.13.96-22.96-10.21.01-2 .01-4 .01-6zM-1455 1431c-10.57-6.03-12.16-10.06-10.52-22.34 1.83-13.67 4.55-27.49 3.94-41.12-.42-9.4 3.38-12.54 10.12-16.78 26.03-16.37 51.63-33.44 77.37-50.27 2.21-1.44 4.3-3.06 7.79-5.56.74 6.35 2.17 11.71 1.85 16.96-1.57 26.1-12.1 48.62-29.69 67.57-14.71 15.85-30.34 30.86-45.72 46.08-2.28 2.26-5.41 3.66-8.15 5.46h-6.99z"/><path class="st0" d="M-1200 941c-.28-1.75-.71-3.49-.82-5.25-.65-9.97-5.73-15.1-15.84-15.97-1.46-.13-2.89-.51-4.34-.78h21v22z"/><path d="M-1353.98 943.51c18.22 69.16 61.48 112.46 131.65 129.43-3 6.86-5.97 14.2-9.39 21.33-22.48 46.81-53.93 87.05-90.8 123.24-38.71 38-82.1 69.91-128.21 98.27-2.5 1.54-3.89 1.3-5.89-.74-9.79-10-19.66-19.92-29.71-29.66-2.25-2.18-2.15-3.97-1.18-6.54 4.17-11.02 6.35-22.4 5.64-34.22-1.63-26.85-20.78-44.88-47.72-43.67-10.15.46-20.25 3.27-30.24 5.56-2.99.69-4.76.63-6.93-1.59-9.31-9.54-18.73-18.97-28.27-28.28-2.08-2.03-2.22-3.45-.71-5.91 38.24-62.34 83.32-118.88 140.16-165.45 30.29-24.82 63.13-45.56 99.25-60.92.9-.39 1.85-.68 2.35-.85zm46.58 157.61c-.23-41.45-34.24-75.27-75.28-74.85-41.62.42-74.88 34.09-74.54 75.45.34 41.68 33.84 74.75 75.39 74.42 41.29-.34 74.66-33.97 74.43-75.02z"/><path d="M-1511.51 1251.94c-.87 13.75-6.9 27.66-18.11 38.86-25.12 25.11-51.41 48.91-81.53 68.06-5.75 3.65-11.72 6.98-17.75 10.15-7.19 3.78-14.05 2.97-18.95-1.8-4.99-4.87-5.77-11.88-1.94-19.35 12.7-24.78 29.62-46.6 47.9-67.4 9.23-10.5 18.86-20.68 28.68-30.64 11.39-11.56 25.33-18.24 41.62-19.27 13.74-.87 20.17 5.48 20.08 21.39zM-1548.55 1349.78l42.79-39.89c7.78 7.78 15.83 15.83 24.11 24.1-14.77 7.68-29.8 15.79-45.12 23.33-8.25 4.06-14.76 1.43-21.78-7.54zM-1591.11 1224.79c-12.81 13.79-26.16 28.16-39.54 42.56-7.68-4.93-10.32-12.47-6.25-20.77 7.46-15.19 15.39-30.15 22.92-44.83 7.76 7.82 15.33 15.45 22.87 23.04z"/><path class="st0" d="M-1307.4 1101.12c.23 41.05-33.14 74.68-74.44 75.01-41.54.33-75.04-32.74-75.39-74.42-.34-41.35 32.93-75.02 74.54-75.45 41.05-.41 75.06 33.41 75.29 74.86zm-119.79.09c-.06 24.69 19.9 44.8 44.62 44.93 24.75.14 45.37-20.45 45.11-45.04-.27-24.65-20.57-44.88-44.96-44.8-24.58.08-44.71 20.27-44.77 44.91z"/><path d="M-1427.19 1101.21c.06-24.64 20.19-44.83 44.77-44.91 24.39-.08 44.7 20.16 44.96 44.8.26 24.58-20.36 45.18-45.11 45.04-24.72-.14-44.68-20.24-44.62-44.93zM481.67 82.16c-1.19 9.84-2.01 19.75-3.66 29.52-1.84 10.93-4.44 21.73-6.68 32.49-47.94-2.6-96.65-51.46-100.01-98.97 13.74-2.81 27.6-5.86 41.54-8.42 7.4-1.36 14.95-1.88 22.44-2.78h27.65c1.29.24 2.57.58 3.87.69 9.02.78 13.55 5.35 14.13 14.25.1 1.57.48 3.12.73 4.68-.01 9.52-.01 19.03-.01 28.54zM25 256.98c2.44-3.47 4.43-7.39 7.39-10.34 14.6-14.58 28.85-29.59 44.38-43.13 15.96-13.91 34.8-22.6 56.51-23.18 4.6-.12 9.24 1.06 14.72 1.75-1.25 2.1-1.73 3.1-2.39 3.98a724.98 724.98 0 0 0-51.14 78.17c-1.44 2.54-2.79 3.19-5.87 2.8-13.43-1.7-26.6.55-39.66 3.6-1.15.27-2.31.54-3.47.81-11.3 2.63-15.28.85-20.48-9.11.01-1.78.01-3.56.01-5.35zM254.23 490.67c-9.43-5.38-10.85-8.97-9.38-19.93 1.63-12.19 4.06-24.52 3.52-36.68-.37-8.39 3.02-11.19 9.03-14.96 23.22-14.6 46.05-29.82 69.01-44.83 1.97-1.29 3.84-2.73 6.95-4.96.66 5.66 1.93 10.44 1.65 15.13-1.4 23.28-10.79 43.37-26.48 60.27-13.12 14.14-27.06 27.52-40.77 41.1-2.03 2.01-4.83 3.26-7.27 4.87-2.1-.01-4.18-.01-6.26-.01z"/><path d="M344.32 55.86c16.25 61.69 54.83 100.3 117.42 115.44-2.68 6.11-5.32 12.67-8.37 19.02-20.05 41.75-48.1 77.64-80.99 109.92-34.53 33.89-73.23 62.36-114.36 87.65-2.23 1.37-3.47 1.16-5.25-.66-8.73-8.92-17.54-17.77-26.5-26.46-2.01-1.95-1.92-3.54-1.05-5.83 3.72-9.82 5.67-19.98 5.03-30.52-1.45-23.94-18.54-40.03-42.56-38.95-9.05.41-18.06 2.91-26.97 4.96-2.67.61-4.25.57-6.18-1.42-8.3-8.51-16.71-16.92-25.21-25.22-1.85-1.81-1.98-3.08-.64-5.27 34.1-55.6 74.32-106.03 125.01-147.57 27.02-22.14 56.31-40.64 88.53-54.33.8-.35 1.66-.6 2.09-.76zm41.56 140.58c-.21-36.97-30.54-67.14-67.14-66.76-37.12.38-66.79 30.41-66.49 67.29.31 37.18 30.18 66.67 67.24 66.38 36.83-.3 66.59-30.3 66.39-66.91z"/><path d="M203.82 330.96c-.78 12.27-6.15 24.67-16.15 34.66-22.41 22.4-45.85 43.63-72.71 60.7-5.13 3.26-10.45 6.23-15.83 9.06-6.41 3.37-12.53 2.65-16.9-1.61-4.45-4.34-5.14-10.6-1.73-17.26 11.33-22.1 26.42-41.57 42.73-60.12 8.23-9.37 16.82-18.44 25.58-27.32 10.16-10.31 22.59-16.27 37.12-17.19 12.24-.78 17.97 4.89 17.89 19.08zM170.79 418.22c13.02-12.14 25.81-24.06 38.17-35.58l21.5 21.5c-13.18 6.85-26.58 14.08-40.24 20.81-7.37 3.62-13.17 1.27-19.43-6.73zM132.83 306.75c-11.43 12.3-23.33 25.12-35.26 37.96-6.85-4.4-9.21-11.13-5.57-18.53 6.66-13.55 13.72-26.89 20.44-39.99 6.91 6.98 13.66 13.78 20.39 20.56zM279.03 196.52c.05-21.98 18.01-39.98 39.93-40.05 21.76-.07 39.87 17.98 40.1 39.96.24 21.93-18.16 40.29-40.24 40.17-22.04-.13-39.85-18.06-39.79-40.08z"/></svg>',
6
38
  listView:{
7
39
  title: '<joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle>',
@@ -2,9 +2,39 @@ var instance = function(){
2
2
  var currentSchema = this;
3
3
  return{
4
4
  title : '${name}',
5
- info:"Instances can be used to make a shallow clone (to be modified of a particular) ",
5
+ info:"Instances can be used to make a shallow clone (to be modified of a particular object) ",
6
6
  listWindowTitle: 'Instances',
7
7
  default_schema:true,
8
+ // Curated summary for agents
9
+ summary:{
10
+ description:'Shallow derived copy of another object (with optional per‑type custom fields).',
11
+ purpose:'Use instances to create task/reward/etc. occurrences or personalized variants while keeping a link to the source object via reference. The instance_type identifies the schema and drives dynamic custom fields.',
12
+ labelField:'name',
13
+ defaultSort:{ field:'created', dir:'desc' },
14
+ searchableFields:['name','info','description','_id'],
15
+ allowedSorts:['created','joeUpdated','name','date_str','points'],
16
+ relationships:{
17
+ outbound:[
18
+ { field:'reference', targetSchema:'*', cardinality:'many' },
19
+ { field:'members', targetSchema:'user', cardinality:'many' }
20
+ ],
21
+ inbound:{ graphRef:'server/relationships.graph.json' }
22
+ },
23
+ joeManagedFields:['created','joeUpdated'],
24
+ fields:[
25
+ { name:'_id', type:'string', required:true },
26
+ { name:'itemtype', type:'string', required:true, const:'instance' },
27
+ { name:'name', type:'string', required:true },
28
+ { name:'info', type:'string' },
29
+ { name:'reference', type:'string', isArray:true, isReference:true, targetSchema:'*' },
30
+ { name:'instance_type', type:'string' },
31
+ { name:'points', type:'number' },
32
+ { name:'date', type:'string', format:'date' },
33
+ { name:'members', type:'string', isArray:true, isReference:true, targetSchema:'user' },
34
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
35
+ { name:'created', type:'string', format:'date-time', required:true }
36
+ ]
37
+ },
8
38
  searchables:['name','info','description','_id'],
9
39
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-16 -16 64 64"><path d="M4 11V6c0-1.1 0.9-2 2-2h4V0H6C2.7 0 0 2.7 0 6v5H4z"/><path d="M22 4h4c1.1 0 2 0.9 2 2v5h4V6c0-3.3-2.7-6-6-6h-4V4z"/><path d="M10 28H6c-1.1 0-2-0.9-2-2v-3H0v3C0 29.3 2.7 32 6 32h4V28z"/><path d="M28 23v3c0 1.1-0.9 2-2 2h-4V32h4c3.3 0 6-2.7 6-6v-3H28z"/></svg>',
10
40
  listTitle:function(instance){
@@ -2,6 +2,37 @@
2
2
  var layout ={
3
3
  title: '${name}',
4
4
  info:"A layout is a standard, reusable page template for your site.",
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Reusable template defining sections, includes, and blocks for pages.',
8
+ purpose:'Layouts provide the base HTML/template used by Pages. They can define expected fields for Pages to fill (layout_fields).',
9
+ labelField:'name',
10
+ defaultSort:{ field:'name', dir:'asc' },
11
+ searchableFields:['name','info','_id'],
12
+ allowedSorts:['name','site','joeUpdated','created'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'site', targetSchema:'site', cardinality:'one' },
16
+ { field:'includes', targetSchema:'include', cardinality:'many' },
17
+ { field:'blocks', targetSchema:'block', cardinality:'many' }
18
+ ],
19
+ inbound:{ graphRef:'server/relationships.graph.json' }
20
+ },
21
+ joeManagedFields:['created','joeUpdated'],
22
+ fields:[
23
+ { name:'_id', type:'string', required:true },
24
+ { name:'itemtype', type:'string', required:true, const:'layout' },
25
+ { name:'name', type:'string', required:true },
26
+ { name:'info', type:'string' },
27
+ { name:'template', type:'string' },
28
+ { name:'blocks', type:'string', isArray:true, isReference:true, targetSchema:'block' },
29
+ { name:'layout_fields', type:'objectList' },
30
+ { name:'includes', type:'string', isArray:true, isReference:true, targetSchema:'include' },
31
+ { name:'site', type:'string', isReference:true, targetSchema:'site' },
32
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
33
+ { name:'created', type:'string', format:'date-time', required:true }
34
+ ]
35
+ },
5
36
  methods:{
6
37
  getSections:function(template_str,add_blank){
7
38
  var sections=[];
@@ -5,6 +5,36 @@ var schema = {
5
5
  }
6
6
  },
7
7
  info:"A ledger uses a tag to automatically track each transaction associated with that tag. A budget can be associated with your ledger using the same tag.",
8
+ // Curated summary for agents
9
+ summary:{
10
+ description:'Period view that aggregates transactions (by tag) and budgets into balances.',
11
+ purpose:'Use ledgers to compute spending, remaining withdrawals, and balances over a time window driven by tags and optional paycheck references.',
12
+ labelField:'name',
13
+ defaultSort:{ field:'__sdate', dir:'desc' },
14
+ searchableFields:['name','_id'],
15
+ allowedSorts:['__sdate','ending_balance','joeUpdated','created'],
16
+ relationships:{
17
+ outbound:[
18
+ { field:'tags', targetSchema:'tag', cardinality:'many' },
19
+ { field:'paycheck', targetSchema:'transaction', cardinality:'one' }
20
+ ],
21
+ inbound:{ graphRef:'server/relationships.graph.json' }
22
+ },
23
+ joeManagedFields:['created','joeUpdated'],
24
+ fields:[
25
+ { name:'_id', type:'string', required:true },
26
+ { name:'itemtype', type:'string', required:true, const:'ledger' },
27
+ { name:'name', type:'string' },
28
+ { name:'start_date', type:'string', format:'date' },
29
+ { name:'end_date', type:'string', format:'date' },
30
+ { name:'starting_balance', type:'number' },
31
+ { name:'ending_balance', type:'number' },
32
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
33
+ { name:'paycheck', type:'string', isReference:true, targetSchema:'transaction' },
34
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
35
+ { name:'created', type:'string', format:'date-time', required:true }
36
+ ]
37
+ },
8
38
  listView:{
9
39
  title:function(item){
10
40
  var balance = item.ending_balance-item.starting_balance;
@@ -2,6 +2,39 @@ var schema = {
2
2
  title : '${name}',
3
3
  default_schema:true,
4
4
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-11 -11 48 48"><path d="M10.2 0.1A1 1 0 0 0 10 0.1 1 1 0 0 0 9.3 0.8L4.4 13.9A1 1 0 1 0 6.3 14.6L10.8 2.2 23.6 4.8C23.3 5.8 21.4 12 19.1 17.9 18.2 20.4 17.4 22 16.6 22.9 16.1 23.4 15.6 23.7 14.9 23.8 11.3 24.3 11.8 19.8 11.8 19.8L0.4 15.2C-0.8 20.3 3.1 21.6 3.1 21.6L11.5 25.3C11.5 25.3 12.3 25.7 13.2 25.9A1 1 0 0 0 13.3 25.9C13.5 25.9 13.8 26 14.1 25.9 14.1 25.9 14.2 25.9 14.2 25.9 15.8 25.9 17.1 25.3 18.1 24.2 19.2 23 20 21.2 21 18.6 23.5 12.1 25.9 4.3 25.9 4.3A1 1 0 0 0 25.2 3L10.4 0.1A1 1 0 0 0 10.2 0.1zM11.7 5.6A1 1 0 0 0 11.7 7.6C11.8 7.6 11.8 7.6 11.9 7.6A1 1 0 1 0 12.3 5.7C12.2 5.6 12.2 5.6 12.2 5.6A1 1 0 0 0 11.8 5.6 1 1 0 0 0 11.7 5.6zM14.9 6.5A1 1 0 0 0 14.8 8.5L19.1 9.7A1 1 0 1 0 19.7 7.8L15.3 6.6A1 1 0 0 0 15 6.5 1 1 0 0 0 14.9 6.5zM10.2 9.8A1 1 0 0 0 10.2 11.7C10.2 11.7 10.3 11.7 10.3 11.8A1 1 0 1 0 10.7 9.8C10.7 9.8 10.6 9.8 10.6 9.8A1 1 0 0 0 10.2 9.8zM13.1 10.7A1 1 0 0 0 12.9 12.6L17.3 14A1 1 0 1 0 17.9 12.1L13.6 10.7A1 1 0 0 0 13.1 10.7zM8.6 13.6A1 1 0 0 0 8.6 15.6C8.6 15.6 8.7 15.6 8.7 15.6A1 1 0 1 0 9.2 13.7C9.1 13.6 9 13.6 9 13.6A1 1 0 0 0 8.6 13.6zM11.4 14.7A1 1 0 0 0 11.3 16.6L15.7 18.1A1 1 0 1 0 16.3 16.2L11.9 14.8A1 1 0 0 0 11.4 14.7z" /></svg>',
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Named collection that aggregates existing items and/or freeform entries.',
8
+ purpose:'Lists bundle references to items across schemas and optional custom bullet-style entries for lightweight tracking or checklists.',
9
+ labelField:'name',
10
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
11
+ searchableFields:['name','info','description','list_type','_id'],
12
+ allowedSorts:['joeUpdated','created','date','name','list_type'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'items', targetSchema:'*', cardinality:'many' },
16
+ { field:'status', targetSchema:'status', cardinality:'one' },
17
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
18
+ ],
19
+ inbound:{ graphRef:'server/relationships.graph.json' }
20
+ },
21
+ joeManagedFields:['created','joeUpdated'],
22
+ fields:[
23
+ { name:'_id', type:'string', required:true },
24
+ { name:'itemtype', type:'string', required:true, const:'list' },
25
+ { name:'name', type:'string', required:true },
26
+ { name:'info', type:'string' },
27
+ { name:'description', type:'string' },
28
+ { name:'items', type:'string', isArray:true, isReference:true, targetSchema:'*' },
29
+ { name:'custom_items', type:'objectList' },
30
+ { name:'status', type:'string', isReference:true, targetSchema:'status' },
31
+ { name:'list_type', type:'string' },
32
+ { name:'date', type:'string', format:'date' },
33
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
34
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
35
+ { name:'created', type:'string', format:'date-time', required:true }
36
+ ]
37
+ },
5
38
  listView:{
6
39
  title: function(list){
7
40
  var itemCount = (list.items||[]).length+(list.custom_items||[]).length;
@@ -1,6 +1,36 @@
1
1
  var schema = {
2
2
  title : '${name}',
3
3
  info:'A collection of recipes and important information about the preparation of this meal.',
4
+ // Curated summary for agents
5
+ summary:{
6
+ description:'Planned meal composed of one or more recipes with notes/files.',
7
+ purpose:'Use meals to group recipes into a single plan or event (e.g., dinner, party).',
8
+ labelField:'name',
9
+ defaultSort:{ field:'name', dir:'asc' },
10
+ searchableFields:['name','info','_id'],
11
+ allowedSorts:['name','mealtype','joeUpdated','created'],
12
+ relationships:{
13
+ outbound:[
14
+ { field:'recipes', targetSchema:'recipe', cardinality:'many' },
15
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
16
+ ],
17
+ inbound:{ graphRef:'server/relationships.graph.json' }
18
+ },
19
+ joeManagedFields:['created','joeUpdated'],
20
+ fields:[
21
+ { name:'_id', type:'string', required:true },
22
+ { name:'itemtype', type:'string', required:true, const:'meal' },
23
+ { name:'name', type:'string', required:true },
24
+ { name:'info', type:'string' },
25
+ { name:'mealtype', type:'string', enumValues:['breakfast','lunch','dinner','snack','side','main','dessert'] },
26
+ { name:'recipes', type:'string', isArray:true, isReference:true, targetSchema:'recipe' },
27
+ { name:'description', type:'string' },
28
+ { name:'files', type:'string', isArray:true },
29
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
30
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
31
+ { name:'created', type:'string', format:'date-time', required:true }
32
+ ]
33
+ },
4
34
  listView:{
5
35
  title: '<joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle>',
6
36
  listWindowTitle: 'Meals'
@@ -2,6 +2,36 @@ var schema = {
2
2
  title : '${name}',
3
3
  default_schema:true,
4
4
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><title>note</title><path d="M42.35,28.1V26h5.86V28.1a2,2,0,0,0,2,2h.5a2,2,0,0,0,2-2V26h5.86V28.1a2,2,0,0,0,2,2h.5a2,2,0,0,0,2-2V26h1.19l3.81,3.74v6h4V28.09L65.91,22H63.08V20a2,2,0,0,0-2-2h-.5a2,2,0,0,0-2,2v2H52.71V20a2,2,0,0,0-2-2h-.5a2,2,0,0,0-2,2v2H42.35V20a2,2,0,0,0-2-2h-.5a2,2,0,0,0-2,2v2H32V20a2,2,0,0,0-2-2h-.51a2,2,0,0,0-2,2v2H18V82H35.7l1-4H22V26h5.47V28.1a2,2,0,0,0,2,2H30a2,2,0,0,0,2-2V26h5.85V28.1a2,2,0,0,0,2,2h.5A2,2,0,0,0,42.35,28.1Z"/><path d="M80.81,48.41,74.4,42a4,4,0,0,0-5.61-.06h0L45.41,65.29l-.47.46-4,16.13,16.14-4,1.51-1.53h0L80.87,54h0A4,4,0,0,0,80.81,48.41Zm-34.22,19,8.83,8.81-8.29,2.07-2.59-2.72ZM57,70.73l-5-5L68.79,49l5,5Z"/></svg>',
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Lightweight content block with optional files and references.',
8
+ purpose:'Notes capture freeform text, bullet lists, and attachments. They can reference other records and be tagged for organization.',
9
+ labelField:'name',
10
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
11
+ searchableFields:['name','info','_id'],
12
+ allowedSorts:['joeUpdated','created','name'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'references', targetSchema:'*', cardinality:'many' },
16
+ { field:'tags', targetSchema:'tag', cardinality:'many' }
17
+ ],
18
+ inbound:{ graphRef:'server/relationships.graph.json' }
19
+ },
20
+ joeManagedFields:['created','joeUpdated'],
21
+ fields:[
22
+ { name:'_id', type:'string', required:true },
23
+ { name:'itemtype', type:'string', required:true, const:'note' },
24
+ { name:'name', type:'string', required:true },
25
+ { name:'info', type:'string' },
26
+ { name:'content_type', type:'string', enumValues:['wysiwyg','code','objectList'] },
27
+ { name:'content', type:'objectList' },
28
+ { name:'references', type:'string', isArray:true, isReference:true, targetSchema:'*' },
29
+ { name:'files', type:'string', isArray:true },
30
+ { name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
31
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
32
+ { name:'created', type:'string', format:'date-time', required:true }
33
+ ]
34
+ },
5
35
  listView:{
6
36
  title: function(note){return '<joe-subtext>'+$c.toDateTime(new Date(note.joeUpdated),{format:'n/d/y'})+'</joe-subtext><joe-title>${name}</joe-title><joe-subtitle>${info}</joe-subtitle>'},
7
37
  listWindowTitle: 'Notes'
@@ -2,12 +2,44 @@ var notification ={
2
2
  info:"A notification is an automated message, sent when an action is taken (ex: new subscriber email). A notification can be an email, sms, or system.",
3
3
  default_schema:true,
4
4
  title: '${name}',
5
+ // Curated summary for agents
6
+ summary:{
7
+ description:'Automated outbound message configuration (email/SMS/system).',
8
+ purpose:'Defines templates and routing for notifications triggered by events. Use to send emails or system notices with dynamic content.',
9
+ labelField:'name',
10
+ defaultSort:{ field:'joeUpdated', dir:'desc' },
11
+ searchableFields:['name','info','notification_code','subject','to','from','_id'],
12
+ allowedSorts:['joeUpdated','created','name','notification_code'],
13
+ relationships:{
14
+ outbound:[
15
+ { field:'dataset', targetSchema:'<schemaName>', cardinality:'one' }
16
+ ],
17
+ inbound:{ graphRef:'server/relationships.graph.json' }
18
+ },
19
+ joeManagedFields:['created','joeUpdated'],
20
+ fields:[
21
+ { name:'_id', type:'string', required:true },
22
+ { name:'itemtype', type:'string', required:true, const:'notification' },
23
+ { name:'name', type:'string', required:true },
24
+ { name:'info', type:'string' },
25
+ { name:'notification_type', type:'string', enumValues:['email'] },
26
+ { name:'notification_code', type:'string' },
27
+ { name:'from', type:'string' },
28
+ { name:'to', type:'string' },
29
+ { name:'dataset', type:'string' },
30
+ { name:'subject', type:'string' },
31
+ { name:'content', type:'string' },
32
+ { name:'text', type:'string' },
33
+ { name:'joeUpdated', type:'string', format:'date-time', required:true },
34
+ { name:'created', type:'string', format:'date-time', required:true }
35
+ ]
36
+ },
5
37
  fields:[
6
38
  'name',
7
39
  'info',
8
40
 
9
41
  {name:'notification_type',type:'select',values:['email'],width:'50%'},
10
- {name:'notification_code',width:'50%'},
42
+ {name:'notification_code', display:'Notification Code',comment:'a human readable unique code for this notification',width:'50%'},
11
43
  'from',
12
44
  'to',
13
45
  'dataset',